PHP file_exists() 在某些文件上返回 false
Posted
技术标签:
【中文标题】PHP file_exists() 在某些文件上返回 false【英文标题】:PHP file_exists() returning false on some files 【发布时间】:2011-06-05 19:24:33 【问题描述】:我在 Linux 服务器上的 file_exists()
php 函数遇到了一个奇怪的问题。
在编辑之前使用 file_exists 检查图像是否在服务器上时,有时会无缘无故地失败。文件路径是绝对的,我已经通过 ssh 检查它们在指定路径上是 100%。
file_exists() 失败的图像仍将显示在浏览器中。代码没有区别,基本的var_dump(file_exists('/home/user/path/image.jpg'));
将返回 false。
所有图像和父目录的文件权限/所有权完全相同。安全模式已关闭。没有 PHP 错误。我现在很困惑,不知道要寻找什么。
这是图像在服务器上的样子:
/home/user/public_html/images/location/1.jpg -- will work
/home/user/public_html/images/location2/1.jpg -- won't work
/home/user/public_html/images/location2/2.jpg -- will work
我对服务器有 root 访问权限,所以如果有人有任何想法,我会很乐意尝试一下。
提前感谢您的建议,如果您需要更多信息,请告诉我。
编辑: 回答下面cmets中的问题。
是的,图像在那里,绝对没有缓存。 安全模式已关闭(我已经在我的帖子中提到了这一点)。 路径不是符号链接,而是指向服务器上文件位置的直接链接。 凤凰,是一致的。工作文件将始终有效,反之亦然。名称是 1.jpg、1.thumb.jpg 等,所以奇怪的字符或空格都不是问题。[root@server ~]# ls -l /home/user/public_html/images/Hawkhurst/
total 92
-rwxr-xr-x 1 user user 24501 Aug 11 2009 1.jpg
-rwxr-xr-x 1 user user 1672 Aug 11 2009 1.thumb.jpg
-rwxr-xr-x 1 user user 14983 Aug 11 2009 2.jpg
-rwxr-xr-x 1 user user 1370 Aug 11 2009 2.thumb.jpg
-rwxr-xr-x 1 user user 17238 Aug 11 2009 3.jpg
-rwxr-xr-x 1 user user 1453 Aug 11 2009 3.thumb.jpg
-rwxr-xr-x 1 user user 14168 Aug 11 2009 4.jpg
-rwxr-xr-x 1 user user 1464 Aug 11 2009 4.thumb.jpg
[root@server ~]#
我已尝试使用权限 777 和 755,这没有区别。例如在这个文件夹中,1 和 2 可能会起作用,而 3 和 4 则不会...
我进行了一个快速测试以查看 apache/php 的运行方式以及它们确实以无人身份运行,但这并不能解释为什么有些图像可以工作,而有些则不能具有完全相同的权限。
编辑 2: 问题已解决。简直不敢相信这是多么愚蠢,从数据库调用的一些文件名末尾有空格......制作原始脚本的人在保存它们之前没有运行任何清理。
【问题讨论】:
文件真的存在吗?由于缓存,您可能会看到图像。 您是否启用了安全模式?This function will return FALSE for symlinks pointing to non-existing files.
几个问题:在您的示例中,不显示为存在的文件是否总是在每次运行脚本时都不会显示,还是间歇性问题?什么是不起作用的文件的实际文件名示例?
谢谢@ben,这真的帮助了我(我不得不遇到同样愚蠢的问题!)。我责怪php。
【参考方案1】:
尝试运行 ls -l /home/user/public_html/images/location/
并将输出添加到您的问题中。
这很可能是权限问题。 PHP 可能没有对该文件的读取权限。
【讨论】:
如果您在 Apache HTTPd Web 服务器上运行 PHP,请注意通常 apache 以daemon
用户身份运行。检查该特定用户是否具有所需的权限。【参考方案2】:
在网上大量搜索后,我自己找到了解决方案。希望对其他人有帮助: 确保你的 apache httpd.conf 中配置的 User 和 Group 和 apache 的 group 和 user 一样。
【讨论】:
【参考方案3】:也许,在文件名中有一个空格符号。这很重要。
【讨论】:
【参考方案4】:我也无法获得正确的结果。 事实证明,这对我来说是文件夹上的权限问题。 您必须确保文件夹具有 Apache 用户的执行权限。 为了修复它,我只是在我的 linux-box 上做了这个: chmod g+x csv_files
亲切的问候 伊万
【讨论】:
以上是关于PHP file_exists() 在某些文件上返回 false的主要内容,如果未能解决你的问题,请参考以下文章