【发布时间】: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。
标签: php file-exists