PHP:检查图像是否存在(方法)

时间:2012-03-30 20:57:52

标签: php curl file-exists

我有超过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。速度至关重要。

更新:文件位于其他服务器上。

2 个答案:

答案 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(),所以这个语句是无意义的,因为它永远不会被触及(并且可能导致内存泄漏,因为你永远不会关闭流)。