Ошибка при сохранении изображения из URL с закодированным содержимым CURL
Здравствуйте, ребята. Я пытаюсь получить изображение из URL в папку на моем сервере, но у меня много проблем с этой процедурой. Я знаю, что содержание этого URL (ИЗОБРАЖЕНИЕ) находится в другом кодировке, или что-то в этом роде, я просто знаю, что на предварительном просмотре много китайских букв и много странных ответов. Код является:
$ch = curl_init ($URL);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
$rawdata=curl_exec($ch);
curl_close ($ch);
* $charsets = array("UTF-8","ISO-8859-1","GB2312");
* var_dump(mb_detect_encoding($rawdata,$charsets));
* var_dump($rawdata);
$fp = fopen($local_file,'w');
fwrite($fp, $rawdata);
fclose($fp)
// * -> trying to debbug
Ответ на этот запрос:
• на предварительном просмотре (первая и вторая строки - мои var_dumps) Предварительный просмотр
• в ответе (первая и вторая строка - мои var_dumps) ответ
Когда я пытаюсь применить этот код к URL, где изображение не имеет такого рода специальных символов, оно работает очень хорошо и загружается на мой сервер... Но когда в ответе есть эти китайские буквы, оно не копирует изображение в мою папку.
1 ответ
Вы так растерялись, что странные символы, которые вы видите, это ваш браузер, пытающийся визуализировать двоичные данные JPG в виде текста (ASCII или Unicode или что-то еще). удалите var_dump и запустите
header("content-type: image/jpeg");
echo $rawdata;
вместо этого, и вы говорите браузеру this is a JPG image, render it as such
и браузер попытается отобразить его как изображение jpg вместо текста, и вы, вероятно, получите изображение.:)
Кроме того, вы используете опасный непереносимый режим fopen, замените w
с wb
в $fp=fopen($local_file,'w');
, и он будет переносимым (ваш текущий режим fopen будет отлично работать в ОС Linux, Mac / BSD, но это приведет к хаосу в операционных системах на базе Microsoft Windows, которые имеют неявный "текстовый режим", где \n
автоматически преобразуется в \r\n
, но меняется на wb
переводит его в двоичный режим, даже в системах на базе Windows.)