Получение удаленного изображения, которое перенаправляет в PHP - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь получить и отобразить удаленное изображение с URL в PHP. Большинство изображений работают, однако некоторые изображения перенаправляют, например:

http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg

Изображение загружается, а затем исчезает. Я использую тег IMG и помещаю этот URL в качестве источника. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Используя эту часть кода, она ничего не делает, кроме отображения тега <img>:

$url = 'http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg';
echo '<img src="' . $url . '" alt="" />';

Я получаю то же поведение, которое вы описываете: изображение не отображается.


Если я посмотрю на то, что происходит на уровне сети, используя Firebug, я увижу это:

http://extern.pascal -martin.fr / so / 5264918.png

В основном:

  • Запрос на загрузку изображения
  • Изображение загружается
  • Но ответ приходит с:
    • a 302 Код состояния HTTP
    • Перенаправляет на URL-адрес, указанный в заголовке Location ответа, который указывает на HTML-страницу
  • Итак, браузер следует этому перенаправлению
  • и загружает HTML-страницу

, которая, конечно, не может отображаться в теге <img>.



Если вы делаете точно такой же тест, отключает Referer (некоторые расширения Firefox могут это делать) , тыВы увидите, что изображение отображается правильно - и Firebug скажет:

http://extern.pascal -martin.fr / so / 5264918-2.png

Примечаниечто на этот раз заголовок Referer отсутствует в запросе, отправленном из моего браузера.


Учитывая это, я бы поспорил, что установлена ​​какая-то защита от горячих ссылок.веб-сайтом, на котором размещено это изображение ...

И вы ничего не можете сделать, кроме размещения файла на своем собственном сервере - если лицензия позволяет вам.

1 голос
/ 10 марта 2011

Сервер запрещает горячее связывание изображений, возможно, на основе реферера. Есть способы обойти это, например использование curl (если установлено на вашем сервере):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://thundafunda.com/');
$imageData = curl_exec($ch);

header("Pragma: public"); // required 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/jpg"); 
header("Content-Transfer-Encoding: binary"); 
echo $imageData;

Отказ от ответственности:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...