Как проверить, если изображение существует в URL-адрес удаленного?


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

распространенных Проблем:

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

Обычно этот тип операции проводится с помощью is_file(), но как же не поддерживает URL-адрес, только абсолютные или относительные собственный сервер, таким образом, получает inviabilizado в этом случае.

Вопрос

, Используя PHP, как я могу проверить, если удаленное изображение существует?

Author: Comunidade, 2014-01-09

4 answers

Для этого вы используете file_exists, в дополнение к удаленному URL-адресу, он работает с абсолютными путями или относительных сам сервер, таким образом:

    if(file_exists('http://www.dominio.com/imagens/minha-imagem.jpg')){
       //seu código...
    }

Другие полезные функции:

  • is_readable - Говорит, если файл может быть прочитан.
  • file - Считывает весь файл в массив
  • file_get_contents - Читает весь файл в строку (очень полезно)
  • fread - Чтение binary-safe файл
  • readfile - Считывает и отображает содержимое файла
 18
Author: Kenny Rafael, 2014-01-10 11:30:07

Мой подход, чтобы справиться с этой проблемой проходит прибегнуть к Библиотеке Client (URL, cURL) (Английском языке), собирать HTTP Status code (Английском языке) и с тем же знать, существует ли изображение в URL-адресе указано:

/**
 * URL Exists
 *
 * Verifica se o caminho URL existe.
 * Isso é útil para verificar se um arquivo de imagem num 
 * servidor remoto antes de definir um link para o mesmo.
 *
 * @param string $url           O URL a verificar.
 *
 * @return boolean
 */
function url_exists($url) {

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return ($code == 200); // verifica se recebe "status OK"
}

Пример использования:

$url = 'http://www.example.com/minha_imagem.jpg';
if (url_exists($url))
    // encontrei :)
else
    // não encontrei :(

Примечание: Это решение зависит от функции добавлены, начиная с PHP 4.0.2.

 17
Author: Zuul, 2014-03-19 13:53:52

Я создал функцию ниже, которое вы можете проверить столько снимков, сколько веб-страниц, или любой другой информации, которая поступает из интернета. Я получаю ответ header - запрос и сравниваю коды. В случае 200 и 302 существует; если 500 произошла внутренняя ошибка на сервере; если 404 " не существует.

Стоит помнить, что тот, кто будет делать запрос, веб-сервер, и то же самое должно иметь доступ в интернет.

<?php
function validarext($url)
{
    $validar = get_headers($url);
    $validar = explode(" ",$validar[0]);
    $validar = $validar[1];
    if($validar == "302" || $validar == "200")
        return true;
    else
        return false;
}

if(validarext("http://www.urldaimagem.com.br/imagem.jpg")){
    //Imagem existe
    echo "Sim";
}
else
{
    //Imagem não existe...
    echo "Não";
}
?>
 7
Author: Hiago Souza, 2014-04-11 12:46:23

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

1: Как сказать, проверить, если фото есть, прежде чем создавать ссылки на тот же, как сделать это с помощью реализации file_exists();. Рекомендуется использовать базу данных, чтобы хранить имя файла так же, а заказываете его и делать проверку с абсолютный путь к его служитель.

2. Когда убедились, что изображение существует, и вскоре было сообщено, запустив процесс замены можно будет удалить существующее изображение с помощью функции unlink(); и вскоре после получения нового изображения, ~temp и известностью-его именем в базе данных.

Q3: За реализацию по умолчанию хэш, чтобы добавить в свои файлы, каждый раз, когда кто-то поднимается файл, захватить имя файла и объединить со следующим заявлением uniquid( rand(6, 8) );

<?php

$nome = $_FILE['image']['name'];
$novoNome = $nome . uniquid( rand(6, 8) );
 0
Author: FelipeBarrosCruz, 2014-01-29 03:23:54