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

时间:2009-09-01 18:30:21

标签: php url image curl

我正在为图书ISBN生成图片的动态网址。我需要一种可靠的PHP方法来检查图像是否实际存在于远程URL。我尝试了不同的PHP库,卷曲等各种方法,但没有一个很好,其中一些是彻头彻尾的慢。鉴于我需要为我的数据库中的每本书生成(并检查!)大约60个URL,这是一个巨大的等待时间。有线索吗?

10 个答案:

答案 0 :(得分:87)

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);

    $result = curl_exec($ch);
    curl_close($ch);
    if($result !== FALSE)
    {
        return true;
    }
    else
    {
        return false;
    }
}

- >这是主机支持curl的最快方法

答案 1 :(得分:49)

使用像这样的getimagesize()方法

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

答案 2 :(得分:6)

这里没有“简单”的方法 - 至少,您需要生成HEAD请求并检查生成的内容类型以确保它是图像。这没有考虑可能的推荐人问题。卷曲是去这里的方式。

答案 3 :(得分:4)

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

答案 4 :(得分:3)

答案 5 :(得分:2)

我一直在为房地产图片跟踪做这件事......

$im = @imagecreatefromjpeg($pathtoimg);
if($im)
  imagedestroy($im); // dont save, just ack...
elseif(!$missing[$inum])
  $img404arr[] = $inum;

它似乎'比下载实际图像更快,从平均100k的图像中每个花费约0.3秒。

我希望我能做一个标题检查并阅读是否在没有下载任何内容的情况下获得200 vs 404。有人有这个方便吗?

答案 6 :(得分:0)

此时这可能是一个静音点,但这对我有用:

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

 return($fp);
}

答案 7 :(得分:0)

来自https://www.experts-exchange.com

的解决方案
<?php
function url_exists($url) {
    if (!$fp = curl_init($url)) return false;
    return true;
}
?>

答案 8 :(得分:0)

if(@getimagesize($remoteImageURL)){
    //image exists!
}else{
    //image does not exist.
}

答案 9 :(得分:-1)

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