【发布时间】:2016-01-27 01:23:59
【问题描述】:
这个问题是关于使用 fopen 检查文件是否存在,而不是 cURL 或 getimagesize 这是替代方法,但不是我要问的。
几年来我一直在代码中使用以下函数而没有出现任何问题,但它突然总是返回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 设置如何工作。如果现在改写,为什么要用已经过时的方式改写?