纠正PHP方式来检查外部图像是否存在?

Ata*_*adj 13 php image exists

我知道答案中至少有10个相同的问题,但它们似乎都没有完美地为我工作.我正在尝试检查内部或外部图像是否存在(图像URL是否有效?).

  1. fopen($url, 'r')失败,除非我使用@fopen():

    Warning: fopen(http://example.com/img.jpg) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in file.php on line 21
    
    Run Code Online (Sandbox Code Playgroud)
  2. getimagesize($img) 当图像不存在时失败(PHP 5.3.8):

    Warning: getimagesize() [function.getimagesize]: php_network_getaddresses: getaddrinfo failed
    
    Run Code Online (Sandbox Code Playgroud)
  3. CURL失败,因为某些服务器不支持它(尽管它主要出现在各处).
  4. fileExists() 失败,因为它不能与外部URL一起使用,也无法检查我们是否正在处理图像.

对这种问题最常见的答案有四种方法是错误的.这样做的正确方法是什么?

Bab*_*aba 15

getimagesize($img) fails when image doesn't exist: 我不确定你明白你想要什么.....

来自PHP DOC

getimagesize()函数将确定任何给定图像文件的大小,并返回尺寸以及文件类型和要在普通HTML IMG标记内使用的高度/宽度文本字符串以及相应的HTTP内容类型.

失败时,返回FALSE.

$img = array("http://i.stack.imgur.com/52Ha1.png","http://example.com/img.jpg");
foreach ( $img as $v ) {
    echo $v, getimagesize($v) ? " = OK  \n" : " = Not valid \n";
}
Run Code Online (Sandbox Code Playgroud)

产量

http://i.stack.imgur.com/52Ha1.png = OK  
http://example.com/img.jpg = Not valid 
Run Code Online (Sandbox Code Playgroud)

getimagesize 工作得很好

编辑

@Paul.但你的问题基本上是说"我如何处理这个,所以当出现错误时我不会收到错误".答案就是"你做不到".因为所有这些函数都会在出现错误时触发错误.所以(如果你不想要错误)你会压制它.这在生产中都不重要因为你不应该显示错误;-) - DaveRandom


sk8*_* ツ 14

这段代码实际上是检查文件...但是,它确实适用于图像!

$url = "http://www.myfico.com/Images/sample_overlay.gif";
$header_response = get_headers($url, 1);
if ( strpos( $header_response[0], "404" ) !== false )
{
   // FILE DOES NOT EXIST
} 
else 
{
   // FILE EXISTS!!
}
Run Code Online (Sandbox Code Playgroud)