我有超过5000个图像链接,我需要找到一种方法来检查它们是否存在。我使用了getimagesize()
,但花了太长时间。速度对我来说至关重要。
我写了一个小功能,但它不起作用,我不知道为什么。
function img_exists($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch))
return true;
else
return false;
curl_close($ch);
}
目前我正在使用PHP执行检查。如果有更好的解决方案,请告诉我。
请注意,如果连接超时(1秒),则该函数返回false。速度至关重要。
更新:文件位于其他服务器上。
答案 0 :(得分:4)
如果可以,curl_multi_*
函数可以使整个过程更快,请查看manual。
此外,只是执行HEAD
请求(而不是GET
)将为您节省相当多的字节/时间,请添加:
curl_setopt_array($ch, array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
答案 1 :(得分:2)
如果您必须在自己的服务器上查找文件,只需使用file_exists()
- 如果您需要检查远程文件并启用allow_url_fopen
,则可以使用fopen()
这样的:
function url_exists($path){
return (@fopen($path,"r")==true);
}
你的函数的一点注意事项:你在返回一个值后试图调用curl_close()
,所以这个语句是无意义的,因为它永远不会被触及(并且可能导致内存泄漏,因为你永远不会关闭流)。