Я создаю динамические URL-адреса изображений для книжных ISBN. Мне нужен надежный способ с PHP, чтобы проверить, действительно ли изображения существуют на удаленном URL-адресе. Я пробовал различные подходы с различными библиотеками PHP, завитки и т. Д., Но ни один из них не работает хорошо, некоторые из них совершенно медленны. Учитывая тот факт, что мне нужно сгенерировать (и проверить!) Около 60 URL-адресов для каждой книги в моей базе данных, это огромное время ожидания. Любые подсказки?
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); if(curl_exec($ch)!==FALSE) { return true; } else { return false; } }
-> это самый быстрый способ, если ваш хост поддерживает завиток
Используйте метод getimagesize (), подобный этому
$external_link = 'http://img.ruphp.com/php/example.jpg'; if (@getimagesize($external_link)) { echo “image exists “; } else { echo “image does not exist “; }
Здесь нет «простого» способа – по крайней мере, вам нужно сгенерировать запрос HEAD
и проверить полученный тип контента, чтобы убедиться, что это изображение. Это не учитывает возможные проблемы с реферерами. завиток – это путь сюда.
Вы можете использовать завиток . Просто установите для параметра curl CURLOPT_NOBODY значение true. Это будет пропускать информацию о теле и получить только голову (таким образом, http-код). Затем вы можете использовать CURLOPT_FAILONERROR, чтобы превратить весь этот процесс в проверку истинного / ложного типа
Вы можете использовать getimagesize ()
Кредит: http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Я делаю это для моего отслеживания картирования недвижимости …
$im = @imagecreatefromjpeg($pathtoimg); if($im) imagedestroy($im); // dont save, just ack... elseif(!$missing[$inum]) $img404arr[] = $inum;
Он «кажется» быстрее, чем загрузка фактического изображения, и занимает около 0,3 секунды для каждого из изображений, которые avg 100k.
Хотел бы я просто сделать проверку заголовка и узнать, получаю ли я 200 против 404, не загружая ничего. У кого-нибудь есть это?
Наверное, это немой момент, но это работает для меня:
function is_webfile($webfile) { $fp = @fopen($webfile, "r"); if ($fp !== false) fclose($fp); return($fp); }
Если все изображения существуют на одном и том же удаленном сервере (или в той же сети), вы можете запустить веб-службу на этом сервере, которая проверит файловую систему для файла изображения и вернет значение bool, указывающее, что изображение существует или нет ,