检查图像是否存在于远程URL上

我正在为图书ISBN生成图片的dynamicurl。 我需要一个可靠的方式来检查图像是否确实存在于远程URL。 我尝试了不同的PHP库,curl等各种方法,但没有一个运行良好,其中一些是彻头彻尾的缓慢。 鉴于我需要为我的数据库中的每本书生成(并检查!)约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; } } 

– >如果您的主机支持curl,这是最快的方式

像这样使用getimagesize()方法

 $external_link = 'http://www.example.com/example.jpg'; if (@getimagesize($external_link)) { echo “image exists “; } else { echo “image does not exist “; } 

这里没有“简单”的方法 – 至less,你需要生成一个HEAD请求,并检查生成的内容types,以确保它是一个图像。 这没有考虑到可能的引用问题。 curl是去这里的路。

你可以使用curl 。 只需将curl选项CURLOPT_NOBODY设置为true即可。 这将跳过身体信息,只有头部(因此也是http代码)。 然后,您可以使用CURLOPT_FAILONERROR将整个过程转换为真/假types检查

你可以使用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; 

这似乎比下载实际的图像更快,从平均每100k的图像每个需要大约0.3秒。

我希望我可以做一个标题检查,并阅读是否我得到一个200对一个404没有下载任何东西。 任何人都有这个方便吗?

这可能是一个哑巴点,但这对我来说很有效:

 function is_webfile($webfile) { $fp = @fopen($webfile, "r"); if ($fp !== false) fclose($fp); return($fp); } 

如果图像全部存在于相同的远程服务器上(或在同一networking中),则可以在该服务器上运行Web服务,以检查文件系统中的映像文件并返回一个bool值,指示该映像是否存在。