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

如何在PHP中查找图像是否存在或呈现ok问题?,php,arrays,image,getimagesize,Php,Arrays,Image,Getimagesize,我有这样的情况,我有一些照片: http://www.example.com/test1.jpg http://www.example.com/test2.jpg http://www.example.com/test3.jpg .... 其中一些可能是死链接,图像不会显示,但会出现一个小的损坏的图标 我这样做是为了检查这些图像: if(!is_array(getimagesize($mediapath))){ $mediapath = ''; } return $mediapath;

我有这样的情况,我有一些照片:

http://www.example.com/test1.jpg
http://www.example.com/test2.jpg
http://www.example.com/test3.jpg
....
其中一些可能是死链接,图像不会显示,但会出现一个小的
损坏的
图标

我这样做是为了检查这些图像:

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

在这种情况下,您可以使用该函数:

$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响应来了解映像是否存在:)

错误抑制运算符不邪恶的情况非常罕见,这就是其中之一

if(@!is_array(getimagesize($mediapath))){
            $mediapath = '';
        } 
        return $mediapath;

请注意语句前面的
@
。这将导致任何错误、警告或通知被抑制。请注意,如果发生致命错误,脚本将在不给出指示的情况下终止

这是一种效率极低的测试方法。PHP必须先下载整个图像,然后才能将文件内容传递给getimagesize()


你最好用卷发。对每个url发出一个
HEAD
请求,看看是否得到200或404响应。这相对便宜,每个URL只需要一个TCP连接和几个数据包(比如,4k的数据传输),每个完整图像文件需要200+k的VS。

谢谢,我应该尝试一下。我会检查这个答案是否是最好的,因为它符合我的代码,但我也愿意尝试@Sarfraz的代码。通过使用
内容类型
标题,无论它是否为有效图像,均表示感谢。