PHP file_exists 不起作用。似乎在颠倒真假

Posted

技术标签:

【中文标题】PHP file_exists 不起作用。似乎在颠倒真假【英文标题】:PHP file_exists does not work. It seems to be reversing true and false 【发布时间】:2016-12-21 03:04:57 【问题描述】:

在处理我的照片库时,我决定最好有一个备用文件,如果应该显示的图像没有。我看过这个网站,可能还有其他人。他们都说要使用:

$VariableName = "photography/small/2014-09-21-red-1.png";
if (file_exists ($VariableName)) echo "Yes!!!";
else echo "Nooo!!!";

if (file_exists ("photography/small/2014-09-21-red-1.png")) echo "Yes!!!";
else echo "Nooo!!!";

出于某种原因,这对我不起作用。它确实有效,但只有在 file_exists 设置为 !file_exists 时才有效,也就是说:“如果此文件不存在,则显示存在的图像(我想要的图像,而不是替换的图像)”。换一种说法: 这表示如果apple 存在,则显示“橙色”;如果apple 不存在,则显示apple

我什至将生成的图片链接放在搜索栏中(使用!file_exists 时),按回车后,它会将我带到图片。我已确保将图像设置为0777,以防干扰,但它似乎没有效果。所有$DataRows 变量都连接到数据库,我已经三重检查photography/small 中的文件名是否与数据库表中的文件名匹配。

为什么会这样?

$URLPath = "http://localhost/~matthew/";
if (file_exists ($URLPath . "photography/small/" . $DataRows["DatePublished"] . "-" . $DataRows["FileName"] . "." . $DataRows["ImageExtension"])) 
 echo '<img src="' . $URLPath . "photography/small/" . $DataRows["DatePublished"] . "-" . $DataRows["FileName"] . "." . $DataRows["ImageExtension"] . '" PhotoName"] . '">' . "\n";

else 
 echo '<img src="' . $URLPath . 'img/no-image.png" >' . "\n";

非常感谢您的帮助。

【问题讨论】:

~mathew 是 htdocs 文件夹中的一个文件夹吗? 有什么具体的原因,你为什么要绕道HTTPing进入你自己的服务器来检查文件是否存在?也就是说,为什么是http://localhost/~matthew 而不是/var/www/my-docroot RTM php.net/manual/en/function.file-exists.php "从 PHP 5.0.0 开始,该函数也可以与一些 URL 包装器一起使用。请参阅支持的协议和包装器以确定哪些包装器支持 stat() 系列功能。” @Robert 我相信~matthew 是一个htdocs 文件夹。我使用 Mac 作为服务器,它的设置不同于 Windows 和 Linux。 @Boldewyn 我使用 Mac 作为服务器,它没有像 Windows 那样的 www 文件夹。 【参考方案1】:

尝试使用 clearstatcache() 并仔细检查文件名和路径。

【讨论】:

我已经确保所有的链接都是正确的。 clearstatcache 不起作用。 请问您使用的是哪个PHP版本?【参考方案2】:

看起来您正在检查文件但将 URL 传递给函数。它可能返回 false,因为 URL 不是您服务器上的有效路径。我建议使用文件的实际路径,或者如果您必须使用 URL,请查看这篇文章:How to check if a file exists from a url

【讨论】:

我愿意,但我对每个条目都使用了数据库循环。正如我在帖子中所说,我已经对文件夹和数据库表中的文件名进行了三次检查。一切都正确。【参考方案3】:

如果你改变 $URLPath 会发生什么

$URLPath = "http://localhost/~matthew/";

$URLPath = $_SERVER['DOCUMENT_ROOT'] . "/~matthew/";

【讨论】:

返回Library/WebServer/Documents/~matthew/,结果什么也没有。 奇数。我从不使用 URL 进行查询以跳过 ping。使用 is_file() 而不是 file_exists() 是否给出相同的结果?你确定你的数据库没问题? 我肯定数据库没问题。我还有一个使用数据库的导航菜单和迷你导航菜单,它们显示没有任何问题。 is_file() 也返回 false。 我认为 ~matthew 是别名而不是物理文件夹。如果是这样,请检查服务器的配置以获取正确的 fs 路径。祝你好运。【参考方案4】:

if (file_exists ($VariableName or "path-to-image"))

这是胡言乱语。只要“path-to-image”不为空,操作数的计算结果就会为 (bool) true。

应该是:

if (file_exists ($VariableName)) 

看来你应该使用

If(is_readable($variable)) 

但是看看你后来的代码,你并没有使用你最初引用的结构。

file_exists() 在很多不同的情况下都像我描述的那样工作。

【讨论】:

$VariableName or "path-to-image" 放在一起表明您可以使用if (file_exists ($VariableName)if (file_exists ("path-to-image")。我会在上面修复它。 @symcbean 我本来打算对他们对if (file_exists ($VariableName or "path-to-image")) 的使用发表评论,但后来意识到这就是 OP 刚才所说的。代码示例的措辞应该更好。在这个问题发布后,我在阅读了几次之后就明白了他们的意思。问题下张贴了cmets,但没有得到回答。所以,现在是任何人的球赛。我怀疑这是他们完全使用路径的方式。他们$VariableName = "path-to-imagepng"; 的例子相当模糊,恕我直言。

以上是关于PHP file_exists 不起作用。似乎在颠倒真假的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 重写规则时 PHP 函数 file_exists 不起作用

file_exists() 在 while 循环内的 php5 中不起作用

函数 file_exists 不起作用

File_exists 功能不起作用

PHP file_exists 在文档根目录之外不起作用

PHP 中的 file_exists 未按预期工作