Невозможно загрузить удаленный образ с PHP CURL - PullRequest
1 голос
/ 17 февраля 2020

Редактировать: я связываюсь со службой поддержки в scrapestack и подтверждаю, что их API не поддерживает файлы изображений.

Я пытаюсь загрузить удаленное изображение, используя CURL с php. Ниже мой код. Но всякий раз, когда я пытаюсь открыть загруженный образ, я всегда получаю:

Cannot read this file. This is not a valid bitmap file, or its format is not currently supported.

Кто-нибудь знает, что не так с моим кодом? Спасибо.

$image ="http://api.scrapestack.com/scrape?access_key=TOKEN-HERE&url=https://i.imgur.com/Cbiu8Ef.png";
$imageName = pathinfo( $image, PATHINFO_BASENAME );
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $image );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTP_CONTENT_DECODING, false);
$source = curl_exec( $ch );
$info = curl_getinfo($ch);
curl_close( $ch );
file_put_contents( $imageName, $source );

Я не могу открыть файл, когда я пытался открыть его с возвышенным, он застрял на загрузке изображения. Когда я открываю его с помощью блокнота, я получаю следующее изображение, похожее на изображение в формате PNG, но оно не является допустимым изображением. Файл начинается с �PNG

IHDR       �   q�I�    IDATx�k�]�u�o��(��_�M��m�8:���_r�G

Вы можете увидеть файл здесь: https://gofile.io/?c=cfsYf2

Похоже, проблема заключается в том, что запрос скручивания выполняется через Scrapestack, потому что если Я указываю скручивание к URL-адресу изображения напрямую, изображение загружается правильно, как показано ниже:

$image ="https://i.imgur.com/Cbiu8Ef.png";

Ответы [ 3 ]

0 голосов
/ 17 февраля 2020

Редактировать: сегодня я немного больше поиграл с шаблоном, похоже, он не поддерживает очистку изображений. Лучше всего, если вы обратитесь в службу поддержки клиентов и узнаете.

@ Towsif прав, вы пытаетесь получить страницу, а не реальное изображение. Я быстро что-то собрала, попробуй и посмотри, сработает ли это для тебя.

0 голосов
/ 18 февраля 2020

Похоже, что вы получите ответ поврежден PNG-изображение.

Если вы используете PHP с версией до 5.1.3 , вам нужно чтобы указать дополнительную опцию для передачи двоичных данных, например изображений:

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

Если вышеуказанные опции не решают проблему, вы можете попробовать установить

curl_setopt($ch, CURLOPT_HTTP_CONTENT_DECODING, false);

в случае у ответа неправильный заголовок Content-Type, позволяющий curl выполнять нежелательное декодирование в необработанном виде.

0 голосов
/ 17 февраля 2020

Ваша проблема с этим URL.

$image ="http://api.scrapestack.com/scrape?access_key=TOKEN-HERE&url=https://imgur.com/a/E5ehGuv";

Если вы go на этот URL

https://imgur.com/a/E5ehGuv

Вы будете см. страницу с изображением, но НЕ путь к изображению. pathinfo() функция здесь не работает и выдает ошибку.

Если вы щелкните правой кнопкой мыши на этом изображении и Откройте изображение в новой вкладке , вы увидите путь к изображению, в данном случае это

https://i.imgur.com/Cbiu8Ef.png

Так что вы можете попробовать этот URL

$image ="http://api.scrapestack.com/scrape?access_key=TOKEN-HERE&url=https://i.imgur.com/Cbiu8Ef.png";
...