PHP:使用fopen检查图像文件是否存在

PHP:使用fopen检查图像文件是否存在,php,curl,fclose,Php,Curl,Fclose,这个问题是关于使用fopen检查文件是否存在,而不是cURL或getimagesize,它们是替代方法,但不是我要问的 我在代码中使用下面的函数已有几年了,没有出现任何问题,而且它总是突然返回FALSE,即使在有效的图像上也是如此。我不知道是不是我无意中造成了一个拼写错误,或者是我的主机改变了PHP的版本,或者是什么原因导致了它,但是如果有人能够发现可能出现的错误,我将不胜感激 以下是代码: function image_exist($url) { if (@fclose

这个问题是关于使用fopen检查文件是否存在,而不是
cURL
getimagesize
,它们是替代方法,但不是我要问的

我在代码中使用下面的函数已有几年了,没有出现任何问题,而且它总是突然返回
FALSE
,即使在有效的图像上也是如此。我不知道是不是我无意中造成了一个拼写错误,或者是我的主机改变了PHP的版本,或者是什么原因导致了它,但是如果有人能够发现可能出现的错误,我将不胜感激

以下是代码:

function image_exist($url) {
            if (@fclose(@fopen( $url,  "r "))) {
             // true;
return TRUE;
            } else {
             // false;
return FALSE;
            }
    }
现在,即使在有效图像上,也会返回
FALSE

为什么要使用
fopen()
fclose()

function image_exist($url) {
    return file_exists($url);
}

编辑:这不适用于通过HTTP的远程文件,您是正确的。

停止使用
@
。这相当于把手指塞进耳朵,然后说“拉拉听不见”。它还隐藏了PHP可能试图提供给您的任何消息,以告诉您问题所在。另外,像那样链接调用简直是糟糕的编程。如果fopen失败,它将返回boolean false,然后尝试将其丢失,从而导致进一步的错误。永远不要假设有了外部资源就成功了。我该如何解释它呢?这段代码是几年前写的,坦率地说,我对php很生疏。你必须重写它。试着用谷歌搜索一下。正如你所看到的,这是一个重复的主题。这已经被回答了很多次了。
$fh=fopen(…);如果(!$fh){return false;}fclose($fh);返回true嘿@user1904273,这是一个很好的心态。从长远来看,弄清楚这一点会很好。问题是,根据服务器配置的不同,您可能无法在URL上实际使用fopen。这可以在php.ini中使用allow\u url\u fopen参数进行更改。这意味着,如果在curl上使用fopen,代码的可移植性将降低,因为curl方法将在不考虑php.ini设置的情况下工作。如果你现在正在重写它,为什么要用一种已经过时的方式来重写它呢?如果这能奏效那就太棒了,然而,当我尝试它时,它返回null。这样做的结果似乎好坏参半,需要启用allow_url_fopen。我怀疑我的主机已关闭url_open,因为我无法再使用它或此建议。我想和主人聊天,但总是很忙。没错。此外,在我的环境中使用fopen/fclose方法进行测试也很有效,因此您可能在主机限制方面看得对。