我生成本书的ISBN图像的动态网址。 我需要一个可靠的方式用PHP来检查是否实际存在的远程URL的图像。 我试着用不同的PHP库,卷曲等各种方法,但它们都没有效果很好,有的则是彻头彻尾的慢。 鉴于这一事实,我需要生成(和检查!)为每本书在我的数据库大约60网址,这是一个巨大的等待时间。 任何线索?
Answer 1:
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;
}
}
- >这是最快的方法,如果你的主机支持卷曲
Answer 2:
使用和getimagesize()这样的方法
$external_link = ‘http://www.example.com/example.jpg’;
if (@getimagesize($external_link)) {
echo “image exists “;
} else {
echo “image does not exist “;
}
Answer 3:
有没有“简单”这里的方式-在一个最起码,你需要生成一个HEAD
请求,并检查所生成的内容类型,以确保它是一个图像。 这是没有考虑到可能的引荐问题。 卷曲是去这里的路。
Answer 4:
你可以使用卷曲 。 刚刚成立的卷曲选项CURLOPT_NOBODY为true。 这将跳过身体信息和只能得到头(因此HTTP代码以及)。 然后,你可以使用CURLOPT_FAILONERROR把整个过程变成一个真/假类型检查
Answer 5:
您可以使用和getimagesize()
信用: http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Answer 6:
我一直在做我的房地产图片追踪...
$im = @imagecreatefromjpeg($pathtoimg);
if($im)
imagedestroy($im); // dont save, just ack...
elseif(!$missing[$inum])
$img404arr[] = $inum;
它似乎“比下载的实际图像,从图像即100K平均需要大约0.3秒每个更快。
我希望我可以只执行报头校验和读我是否可以得到一个200 VS 404,而无需下载任何东西。 任何人有这方便?
Answer 7:
这也可能是在这一点上的屏蔽点,但是这对我的作品:
function is_webfile($webfile)
{
$fp = @fopen($webfile, "r");
if ($fp !== false)
fclose($fp);
return($fp);
}
Answer 8:
如果图像都是一样的远程服务器上存在(或在同一网络中),你可以在该服务器上的Web服务,它会检查文件系统的图像文件,并返回一个布尔值,指示wheter图像存在与否。
文章来源: Check whether image exists on remote URL