2

我有超过 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。速度很关键。

更新:文件位于不同的服务器上。

4

2 回答 2

5

如果可以,curl_multi_*功能应该使整个过程更快,请查看手册

此外,只需执行HEAD请求(而不是GET)将为您节省相当多的字节/时间,添加以下内容:

curl_setopt_array($ch, array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
于 2012-03-30T21:10:59.757 回答
2

如果您必须在自己的服务器上检查文件,您可以简单地使用file_exists()- 如果您需要检查远程文件并已allow_url_fopen启用,您可以fopen()像这样使用:

function url_exists($path){
    return (@fopen($path,"r")==true);
}

对你的函数做一点说明:你试图curl_close()在返回一个值后调用,所以这个语句是没有意义的,因为它永远不会到达(并且可能导致内存泄漏,因为你从不关闭流)。

于 2012-03-30T21:04:29.557 回答