Как проверить, если изображение существует в URL-адрес удаленного?
таким образом, мы могли иметь администрирования веб-сайта, который состоится с сервера, отличного от того, где сайт расположен, возникла проблема обработки изображений отдаленных.
распространенных Проблем:
- Убедиться, что изображение действительно существует, прежде чем создавать ссылки для одного и того же;
- При замене данного изображения, проверки предыдущего существует, может быть удален;
- убедитесь, что изображение загружается на сервер не с тем же именем, существующий имидж.
Обычно этот тип операции проводится с помощью is_file()
, но как же не поддерживает URL-адрес, только абсолютные или относительные собственный сервер, таким образом, получает inviabilizado в этом случае.
Вопрос
, Используя PHP, как я могу проверить, если удаленное изображение существует?
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 - Считывает и отображает содержимое файла
Мой подход, чтобы справиться с этой проблемой проходит прибегнуть к Библиотеке 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.
Я создал функцию ниже, которое вы можете проверить столько снимков, сколько веб-страниц, или любой другой информации, которая поступает из интернета. Я получаю ответ 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";
}
?>
И В системе, которая реализует fileUpload вы делаете процедуру, которая будет искать, если данной фото уже существует. Эта функция будет иметь полезность, чтобы все процессы:
1: Как сказать, проверить, если фото есть, прежде чем создавать ссылки на тот же, как сделать это с помощью реализации file_exists();. Рекомендуется использовать базу данных, чтобы хранить имя файла так же, а заказываете его и делать проверку с абсолютный путь к его служитель.
2. Когда убедились, что изображение существует, и вскоре было сообщено, запустив процесс замены можно будет удалить существующее изображение с помощью функции unlink(); и вскоре после получения нового изображения, ~temp и известностью-его именем в базе данных.
Q3: За реализацию по умолчанию хэш, чтобы добавить в свои файлы, каждый раз, когда кто-то поднимается файл, захватить имя файла и объединить со следующим заявлением uniquid( rand(6, 8) );
<?php
$nome = $_FILE['image']['name'];
$novoNome = $nome . uniquid( rand(6, 8) );