【问题标题】:PHP: check if image file exists using fopenPHP:使用 fopen 检查图像文件是否存在
【发布时间】:2016-01-27 01:23:59
【问题描述】:

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

几年来我一直在代码中使用以下函数而没有出现任何问题,但它突然总是返回FALSE,即使在有效图像上也是如此。我不知道我是否不小心打错了,或者我的主机是否更改了 PHP 的版本,或者可能是什么原因造成的,但如果有人能发现可能出错的地方,我将不胜感激。

代码如下:

function image_exist($url) {
            if (@fclose(@fopen( $url,  "r "))) {
             // true;
return TRUE;
            } else {
             // false;
return FALSE;
            }
    }

现在即使在有效图像上也会返回 FALSE

【问题讨论】:

  • 停止使用@。这相当于把你的手指塞进耳朵里然后“拉拉拉拉听不到你”的编码。它还隐藏了 PHP 可能试图给您以告诉您问题所在的任何消息。另外,像这样链接调用简直就是糟糕的编程。如果 fopen 失败,它会返回 boolean false,然后您尝试 fclose,从而导致更多错误。永远不要假设外部资源会成功。
  • 我将如何解开它?几年前写了这段代码,坦率地说我对 php 很生疏。
  • 你必须重写它。尝试用谷歌搜索它,而不是。 stackoverflow.com/questions/1363925/… stackoverflow.com/questions/14806159/… stackoverflow.com/questions/10489210/… stackoverflow.com/questions/981954/… 如您所见,这确实是一个重复的主题。这个问题已经回答了很多次了。
  • $fh = fopen(...); if (!$fh) { return false; } fclose($fh); return true;
  • 嘿@user1904273,这是一个很好的心态。从长远来看,弄清楚这一点将是一件好事。问题是,根据服务器配置,您可能无法在 URL 上实际使用 fopen。这可以在 php.ini 中使用 allow_url_fopen 参数进行更改。这意味着如果您使用 fopen 而不是 curl,则代码的可移植性会降低,因为 curl 方法将不管这个 php.ini 设置如何工作。如果现在改写,为什么要用已经过时的方式改写?

标签: php curl fclose


【解决方案1】:

既然有a function 用于此目的,为什么还要使用fopen()fclose()

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

编辑:你说得对,这对于 HTTP(S) 上的远程文件不起作用。

【讨论】:

  • 如果这行得通,那就太棒了,但是,当我尝试它时,它重新调整为 null。这似乎有不同的结果,它需要启用 allow_url_fopen 。 stackoverflow.com/questions/7991425/… 我怀疑我的主机已经关闭了 url_open,因为我不能再使用它或这个建议。我正在尝试与主持人聊天,但一直很忙。
  • 没错。此外,在我的环境中使用您的 fopen/fclose 方法进行测试是可行的,因此您可能正在寻找正确的托管限制方向。
猜你喜欢
  • 2011-02-25
  • 1970-01-01
  • 2013-01-13
  • 2018-02-12
  • 2013-07-18
  • 1970-01-01
  • 2013-03-02
  • 2014-11-25
  • 1970-01-01
相关资源
最近更新 更多