2012-03-29 2 views
0

У меня есть веб-приложение, основанное на PHP, которое (выполняет некоторую обработку и) отображает изображения, размещенные на внешних серверах. Некоторые из этих изображений (т. Е. От Flickr), когда они удаляются, оставляют перенаправление позади, что указывает на gif «Missing Image» или что-то подобное.Информация заголовка стороны клиента

Используя get_headers() функцию в PHP на каждом изображении, я был в состоянии проверить на стороне сервера, если изображение было удалено или нет (например, путем проверки, если Content-Type был image/gif вместо image/jpg, на Flickr изображений).

Проблема заключается в том, что каждая страница в среднем возвращает 20-100 изображений (иногда даже больше), а get_headers() требует в среднем 0,3-0,5 с для каждого изображения, что делает слишком долгое время ожидания для пользователя.

Мне было интересно, можно ли проверить эту проверку на стороне клиента, используя javascript. Пользователь будет ожидать загрузки изображений (как и на любой странице), я проверю изображения, если они действительны, и установите свойство display равным none на отсутствующих.

ответ

0

Вы можете использовать curl_multi_exec(), чтобы проверять сразу несколько URL-адресов. Если вы используете следующие опции cURL:

CURLOPT_FOLLOWLOCATION = FALSE 
CURLOPT_NOBODY = TRUE 
CURLOPT_HEADER = TRUE 

... это предотвратит следующие переадресации. Затем вы можете использовать эту информацию (независимо от того, является ли ответ перенаправлением или нет, см. CURLINFO_HTTP_CODE в curl_get_info()), чтобы определить, существует ли файл. Используя curl_multi_exec(), вы будете выполнять несколько проверок сразу, что должно резко сократить время загрузки страницы.

+0

'curl_multi_exec()' уменьшает проверку до ~ 0,5 сек для 24 изображений (возможно, для более того, так как запускается одновременно), что приемлемо для природы приложения, поэтому оно работает как шарм. Благодарю. – Finik

0

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

var request; 
    request = $.ajax({ 
       type: "HEAD", 
       url: 'your image url', 
       success: function() { 
       alert("Size is " + request.getResponseHeader("Content-Length")); 
       alert("Type is " + request.getResponseHeader("Content-Type")); 
       } 
      }); 

Найдено здесь: Can I get an image's file size and mime-type via JavaScript (FireFox/Gecko/Mozilla only)

+0

Хорошо, я полностью забыл, что мог использовать AJAX для пересылки запросов обратно на мой сервер. Я буду помнить об этом в будущем. – Finik

0

Да, вы можете использовать JavaScript, например, Ajax, чтобы сделать ваши запросы в программе PHP.

Однако, вместо того, чтобы использовать get_headers(), вы могли бы прийти лучше использовать эту функцию: http://es.php.net/manual/es/function.file-exists.php#85246

Привет!

Смежные вопросы