我有这种情况,我有一些照片:
http://www.example.com/test1.jpg
http://www.example.com/test2.jpg
http://www.example.com/test3.jpg
....
其中一些可能是死链接,图片不会显示,但会显示一个小broken
图标。
我这样做是为了检查这些图像:
if(!is_array(getimagesize($mediapath))){
$mediapath = '';
}
return $mediapath;
基本上getimagesize
获取图像的图像大小:),并返回一个数组。如果图像被破坏,则会出错。
这是我的问题。代码可以正常工作,但现在我收到错误告诉我某些文件不存在:
Warning: getimagesize(http://www.example.com/test2.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\zend\models\mappers\search.php on line 173
但这是理想的结果,我只是不想在页面上出现这些错误,不,我不想在PHP中禁用错误,我希望'getimagesize'方法不显示错误。
答案 0 :(得分:5)
您可以在这种情况下使用get_headers
功能:
$url = 'http://www.example.com/test1.jpg';
print_r(get_headers($url));
它会报告一个这样的数组:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 29 May 2004 12:28:13 GMT
[2] => Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
[3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
[4] => ETag: "3f80f-1b6-3e1cb03b"
[5] => Accept-Ranges: bytes
[6] => Content-Length: 438
[7] => Connection: close
[8] => Content-Type: text/html
)
您可以使用该http响应来了解图像是否存在:)
答案 1 :(得分:2)
在极少数情况下,错误抑制运算符不是邪恶的,这是其中之一。
if(@!is_array(getimagesize($mediapath))){
$mediapath = '';
}
return $mediapath;
请注意语句前面的@
。这将导致任何错误,警告或通知被抑制。请注意,如果发生致命错误,脚本将终止而不给出指示!
答案 2 :(得分:2)
这是一种非常低效的测试方法。 PHP必须先下载整个图像,然后才能将文件的内容传递给getimagesize()。
你最好使用curl。为每个网址发出HEAD
个请求,看看您是否收到了200或404的回复。这相对便宜,而且每个URL只有一个TCP连接和几个数据包(比如4k数据传输),v。每个完整图像文件200 + k。