PHP очищает удаленные изображения, у которых нет расширений

Я разработал парсер изображений, который будет собирать определенные изображения с удаленных сайтов и отображать их при вставке в текстовое поле. Логика включает поиск изображений, оканчивающихся на .jpg .jpeg. png и т. д.

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

На сайтах www.express.com и www.underarmour.com есть эта и многие другие проблемы.

Какую функцию я могу использовать для поиска изображений по заданному URL-адресу, а затем отображать их соответствующим образом, у которых нет расширения файла?

Спасибо еще раз.


person Chris Favaloro    schedule 01.08.2012    source источник
comment
Насколько я знаю, если у вас нет расширения файла, вы не можете просто догадаться и добавить расширение.   -  person Matt    schedule 01.08.2012
comment
если у вас нет разрешений от этих сайтов, вы не можете этого сделать. Условия использования на обоих названных сайтах достаточно ясны.   -  person    schedule 01.08.2012
comment
Ищите теги img вместо расширений   -  person Steve Robbins    schedule 01.08.2012
comment
Я ничего не знаю о вашей конкретной проблеме. В HTTP имена файлов не имеют значения, поскольку у нас есть заголовок Content-Type. Я не думаю, что кто-то на самом деле генерирует изображения с помощью клиентского JavaScript :-?   -  person Álvaro González    schedule 02.08.2012


Ответы (2)


если URL-адрес не исходит от <img src="...">, НЕТ способа сказать, что вы получите от определенного URL-адреса. http://example.com/index.html вполне может быть PHP-скриптом, который обслуживает zip-файл.

НЕВОЗМОЖНО достоверно сказать, что даст вам URL-адрес, пока вы не нажмете URL-адрес и не проверите заголовки + загруженные данные.

person Marc B    schedule 01.08.2012
comment
По сути, думайте о сценарии как о том, как работает ресурс Facebook. Он берет ссылку и создает предварительный просмотр изображения с сайта. Таким образом, скрипт сам по себе будет рыскать по HTML-коду сайта. - person Chris Favaloro; 01.08.2012
comment
скорее всего, FB только извлекает URL-адреса из тегов img и не следит за каждым шатким URL-адресом на странице, если он указывает на изображение. - person Marc B; 01.08.2012

Я думаю, у вас есть два варианта:

  1. Создайте некоторые эвристики, может ли URL-адрес быть изображением (например, найти часть /images/ в URL-адресе)

  2. Загрузите каждый URL-адрес и проверьте, являются ли возвращаемые данные изображением (например, используя getimagesize())

Вторая версия более универсальна, но достаточно требовательна как к пропускной способности, так и к ресурсам.

person apfelbox    schedule 01.08.2012
comment
getimagesize загружает весь URL-адрес, прежде чем делать свое дело. Ничего страшного, если вы на самом деле указываете на то, что оказывается 200-большим значком .gif. очень неприятно, если эта странная ссылка окажется 4-гигабайтным iso-образом. - person Marc B; 01.08.2012
comment
Я согласен, на данный момент я получаю размер изображения, однако это только для изображений с расширением файла. Большая проблема заключается в том, что некоторые из этих сайтов печатают изображения через javascript. - person Chris Favaloro; 01.08.2012
comment
@ Марк Б: Это правильно. Но вы также можете предварительно загрузить данные и вызвать getimagesize() для локальных данных. Вы можете использовать, например, cURL, чтобы просто получить заголовки ответа (HEAD запрос), решить, является ли это изображением (и посмотреть на размер файла, который также должен быть в заголовках), а затем загрузить его. Но а) эти заголовки могут быть ложными и б) вы выдаете массу запросов, если делаете это таким образом. - person apfelbox; 01.08.2012
comment
@ Крис Фавалоро: печать через javascript = динамическая загрузка в DOM или фактическая печать изображения с помощью JavaScript в <canvas>, SVG и т. д.? - person apfelbox; 01.08.2012