Я создаю динамические URL-адреса изображений для книжных ISBN. Мне нужен надежный способ с PHP, чтобы проверить, действительно ли изображения существуют на удаленном URL-адресе. Я пробовал различные подходы с различными библиотеками PHP, завитки и т.д., Но ни один из них не работает хорошо, некоторые из них совершенно медленны. Учитывая тот факт, что мне нужно сгенерировать (и проверить!) Около 60 URL-адресов для каждой книги в моей базе данных, это огромное время ожидания. Любые подсказки?
Проверьте, существует ли изображение на удаленном URL-адресе
Ответ 1
function checkRemoteFile($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
if($result !== FALSE)
{
return true;
}
else
{
return false;
}
}
→ это самый быстрый способ, если ваш хост поддерживает curl
Ответ 2
Используйте метод getimagesize(), подобный этому
$external_link = ‘http://www.example.com/example.jpg’;
if (@getimagesize($external_link)) {
echo "image exists ";
} else {
echo "image does not exist ";
}
Ответ 3
Здесь нет "простого" способа - по крайней мере, вам нужно сгенерировать запрос HEAD
и проверить полученный тип контента, чтобы убедиться, что это изображение. Это не учитывает возможные проблемы с реферерами. curl - путь сюда.
Ответ 4
Вы можете использовать curl. Просто установите для параметра curl CURLOPT_NOBODY значение true. Это будет пропускать информацию о теле и получить только голову (таким образом, http-код). Затем вы можете использовать CURLOPT_FAILONERROR, чтобы превратить весь этот процесс в проверку истинного/ложного типа
Ответ 5
Вы можете использовать getimagesize()
Кредит: http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Ответ 6
Я делаю это для моего отслеживания картины недвижимости...
$im = @imagecreatefromjpeg($pathtoimg);
if($im)
imagedestroy($im); // dont save, just ack...
elseif(!$missing[$inum])
$img404arr[] = $inum;
Это кажется "быстрее", чем загрузка фактического изображения, и занимает около 0,3 секунды для каждого из изображений, которые avg 100k.
Мне жаль, что я не могу просто проверить заголовок и прочитать, получаю ли я 200 против 404, не загружая ничего. У кого-нибудь есть что-то удобное?
Ответ 7
Это, вероятно, немой момент в этой точке, но это работает для меня:
function is_webfile($webfile)
{
$fp = @fopen($webfile, "r");
if ($fp !== false)
fclose($fp);
return($fp);
}
Ответ 8
Решение от https://www.experts-exchange.com
<?php
function url_exists($url) {
if (!$fp = curl_init($url)) return false;
return true;
}
?>
Ответ 9
Если все изображения существуют на одном и том же удаленном сервере (или в той же сети), вы можете запустить веб-службу на этом сервере, которая проверит файловую систему для файла изображения и вернет значение bool, указывающее, что изображение существует или нет.