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

PHP:检查图像是否存在(方法),php,curl,file-exists,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_seto

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


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

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

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

函数需要注意的一点是:您试图在返回值后调用
curl\u close()
,因此此语句毫无意义,因为它永远无法到达(并且可能会导致内存泄漏,因为您从未关闭流)。

如果可以,
curl\u multi.*
函数应该使整个过程更快,请检查

此外,只需执行一个
HEAD
请求(而不是
GET
)即可节省大量字节/时间,添加以下内容:

curl_setopt_array($ch, array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');

映像是远程的,或者此脚本是否与映像在同一托管空间上运行?如果是,可以使用
file\u exists()
是否可以为fopen添加自定义超时?@haltabush您可以为fsockopen超时如果不想看到头部结果,请添加curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,1);