Есть ли способ проверить, существует ли удаленный образ?PHP - PullRequest
3 голосов
/ 19 января 2012

Мой сайт работает в LAMP, мой образ CDN находится в nginx.

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

Есть ли программный способ проверить, существует ли удаленный образ CDN?

(возможно, определить заголовок? Как я заметил, что если изображение запроса не существует, оно возвращает 404)

enter image description here

Ответы [ 5 ]

3 голосов
/ 19 января 2012

Я использую этот метод для проверки связи с удаленными файлами:

  /**
   * Use HTTP GET to ping an url
   *
   * /!\ Warning, the return value is always true, you must use === to test the response type too.
   * 
   * @param string $url
   * @return boolean true or the error message
   */
  public static function pingDistantFile($url)
  {
    $options = array(
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_URL => $url,
      CURLOPT_FAILONERROR => true, // HTTP code > 400 will throw curl error
    );

    $ch = curl_init();
    curl_setopt_array($ch, $options);
    $return = curl_exec($ch);

    if ($return === false)
    {
      return curl_error($ch);
    }
    else
    {
      return true;
    }
  }

Вы также можете использовать метод HEAD, но, возможно, ваш CDN отключен.

2 голосов
/ 19 января 2012

Для этого вы можете использовать file_get_contents:

 $content = file_get_contents("path_to_your_remote_img_file");
 if ($content === FALSE)
 {
     /*Load local copy*/
 }
 else
 {
     /*Load $content*/
 }

Да, и еще одна вещь - если вы хотите отображать изображение только с тегом img, вы можете просто сделать это - используя атрибут imerror img tags - если изображение не существует на сервере, атрибут onerror будет локальный файл:

<img src="path_to_your_remote_img_file" onerror='this.src="path_to_your_local_img_file"'>

Вы можете прочитать похожий вопрос по этому вопросу здесь: обнаружить поврежденное изображение с помощью php

2 голосов
/ 19 января 2012

Пока копия общедоступна, вы можете просто проверить 404 с помощью cURL. См. Этот вопрос подробно, как это сделать.

1 голос
/ 19 января 2012

Еще один более простой способ - без CURL:

$headers = get_headers('http://example.com/image.jpg', 1);
if($headers[0] == 'HTTP/1.1 200 OK')
{
  //image exist
}
else
{
  //some kind of error
}
0 голосов
/ 14 февраля 2013
<?php
if (is_array(getimagesize("http://www.imagelocation.com/image.png"))){
   // Image ok
} else {
   // Image not ok
}
?>
...