Надо в ресайзер картинок в цикле закидывать картинки с чужого сервера, если они "плохие", то сваливать в отдельную функцию, которая делает их "хорошими". Пример плохой картинки http://cdn.io-opt.com/images/products/ЛГ-06пр..png
или http://cdn.io-opt.com/images/products/1020 СD_garbage bags_60L_40pcs.jpg
. Сами картинки хорошие, плохие у них урлы.
Для ресайзера мне по-любому надо пройтись по картинке функцией get_headers(), а она такие урлы не хавает. Казалось бы всё просто: втыкнул urlencode() и порядок, но не тут то было. urlencode() все не цифро-буквенные символы, кроме -_ декодирует, в том числе и схему (протокол), это тоже легко обходится
private function urlencode($url) {
$url='http://cdn.io-opt.com/images/products/ЛГ-06пр..png'; // тест
$a = (string) 'https://';
$b = (string) 'http://';
$https = stripos($url, $a);
$http = stripos($url, $b);
if ($https !== false) {$num = 8; $c = $a;}
if ($http !== false) {$num = 7; $c = $b;}
$url = str_replace('%20',' ',$url); //возвращаем пробелы на место
$url = mb_strcut($url, $num, null); //отрезаем протокол
$url = urlencode($url); //кодируем хвост
$url = (string) $с.$url; //возвращаем протокол на место
print_r($url);
// print_r(stream_get_meta_data(fopen($url,"r")));die();
print_r(get_headers($url));die();
// return $url;
}
в итоге получаем кодированный урл, но get_headers() опять его не хочет. Пробовал stream_get_meta_data(), тоже не то. Обе приведенные картинки (с русскими буквами и пробелами в урле открываются браузером). Если взять урл, который создал браузер для открытия картинки, т.е. с %20 и скормить его в get_headers(), то опять же ответ сервера 404. Не понятно, для чего вообще тогда функция urlencode() и в какой вид мне надо преобразовать урл, чтоб он обработался функцией get_headers(). Пожалуйста, подскажите.
Вам необходимо кодировать не всю ссылку, а только не корректную часть.
(После обработки urlencode
заменяем проставленные +
вместо пробелов на %20
и оба варианта ссылок будут работать корректно)
Обратите внимание на комментарии:
//$url='http://cdn.io-opt.com/images/products/1020 СD_garbage bags_60L_40pcs.jpg';
$url='http://cdn.io-opt.com/images/products/ЛГ-06пр..png'; // тест
$bz = explode('/', $url); // Разделяем на части
$last = array_pop($bz); // Получаем последнюю часть
$url1 = urlencode($last); // Кодируем её
$new = array_push($bz, $url1); //Добавляем обратно
$url2 = implode('/', $bz); // Объединяем массив обратно в строку
$url3 = str_replace('+','%20',$url2); // заменяем + после urlencode на %20
print_r(get_headers($url3));die();
Вы можете енкодировать всё кроме основного домена, через перебор массива с нужного индекса.
Вот пример:
//$url='http://cdn.io-opt.com/images/products/1020 СD_garbage bags_60L_40pcs.jpg';
$url='http://cdn.io-opt.com/images/products/ЛГ-06пр..png'; // тест
$bz = explode('/', $url); // Разделяем на части
for ($i = 3; $i < count($bz); $i++){
$tempUrl = urlencode($bz[$i]); // Кодируем части
$bz[$i] = $tempUrl; //Заменяем старые части url на енкодированные
}
$url2 = implode('/', $bz); // Объединяем массив обратно в строку
print_r($url2);
$url3 = str_replace('+','%20',$url2); // заменяем + после urlencode на %20
print_r(get_headers($url3));die();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть ссылка https://sitecom/ru/moskov/baby/andyushak-evgeniya-petrovna
Как в кратчайшие сроки сделать портфолио? Имеется опыт в разработке под PHP 3 года, laravel - 05 года
Вообщем есть приложение Laravel + VueJS на одной странице, точнее на нескольких страницах есть пагинация сделанная таким образом: