如何查找图像是否存在,或在PHP中呈现问题?

时间:2012-02-15 20:52:27

标签: php arrays image getimagesize

我有这种情况,我有一些照片:

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'方法不显示错误。

3 个答案:

答案 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。