Невозможно правильно загрузить файл удаленного изображения в PHP с помощью Curl

Я пытаюсь загрузить удаленное изображение с помощью Curl, он загружает файл, однако, когда я пытаюсь открыть изображение на своем Mac, я получаю сообщение «невозможно открыть».

Я вижу, что имя файла и расширение не повреждены, однако почему-то он не сохранился так правильно, поскольку размер файла составляет 177 байт, но я ожидаю, что размер файла будет около 3 КБ.

Кто-нибудь может подсказать, почему это так? Удаленный сайт каким-то образом мешает мне загрузить файл? Я попробовал этот же код с некоторыми другими изображениями на других сайтах, и он отлично работает??

    $url = 'http://www.fifaindex.com/static/FIFA16/images/crest/256/light/21.png';
    $saveto = '21.png';

    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    $raw = curl_exec($ch);
    curl_close ($ch);
    if(file_exists($saveto)){
        unlink($saveto);
    }
    $fp = fopen($saveto,'x');
    fwrite($fp, $raw);
    fclose($fp);

person Zabs    schedule 31.05.2016    source источник
comment
URL-адрес fifaindex.com/static/FIFA16/images/ crest/256/light/21.png недействителен?   -  person KIKO Software    schedule 01.06.2016
comment
URL-адрес выше, если щелкнуть, чтобы загрузить png для меня? У вас нет логотипа png футбольного клуба?   -  person Zabs    schedule 01.06.2016
comment
Нет, я получаю ошибку 404 Not Found. Пожалуйста, проверьте содержимое загруженного файла с помощью текстового редактора, чтобы увидеть, что у вас получилось.   -  person KIKO Software    schedule 01.06.2016
comment
Странно... я открываю этот файл в текстовом редакторе и получаю ошибку 404 "Не найдено"... так что я предполагаю, что удаленный сайт каким-то образом предотвращает загрузку файлов? ‹html› ‹head›‹title›404 Not Found‹/title›‹/head› ‹body bgcolor=white› ‹center›‹h1›404 Not Found‹/h1›‹/center› ‹hr›‹center›nginx /1.4.6 (Ubuntu)‹/center› ‹/body› ‹/html›   -  person Zabs    schedule 01.06.2016
comment
Я так не думаю. Очистите кэш браузера и повторите попытку.   -  person KIKO Software    schedule 01.06.2016
comment
Хммм... если я нажму на ссылку на сайте ниже, изображение загрузится, но когда я напрямую перейду к URL-адресу изображения, оно, похоже, не загрузится - изображение, которое я пытаюсь загрузить, находится на этой странице здесь - fifaindex.com/team/21/fc-bayern Это изображение, которое я пытаюсь загрузить удаленно - есть идеи?   -  person Zabs    schedule 01.06.2016
comment
Когда я нажимаю на ссылку страницы, изображения не отображаются, я вижу «альтернативный» текст. Этот сайт сломан.   -  person KIKO Software    schedule 01.06.2016


Ответы (1)


Веб-сайт, с которого вы пытаетесь получить изображение, вероятно, добавил некоторые ограничения, поэтому, если изображение вызывается из-за пределов домена, оно не будет обслуживаться.

Чтобы обойти это, вы можете указать реферер в параметрах CURL, установив его с URL-адресом сайта, с которого вы хотите получить изображение.

В твоем случае

curl_setopt($ch, CURLOPT_REFERER, "http://www.fifaindex.com");

Я попробовал это сам на своем локальном сервере, и это сработало.

person Igor S Om    schedule 31.05.2016