PHP file_exists()在某些文件上返回false

时间:2011-01-08 16:14:00

标签: php file-exists

我在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权限,所以如果有人有任何想法我会很高兴尝试一下。

提前感谢您的建议,如果您需要额外信息,请与我们联系。

修改 要回答以下评论中的问题。

  • 是图像在那里,它绝对不是缓存。
  • 安全模式已关闭(我已在帖子中提到过这一点)。
  • 路径不是符号链接,而是指向服务器上文件位置的直接链接。
  • 凤凰城,这是一致的。工作文件将始终有效,反之亦然。这些名字是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:问题已解决。无法相信它是多么愚蠢,从数据库中调用的一些文件名最后都有空格......无论是谁制作原始脚本都没有在保存之前进行任何清理。

4 个答案:

答案 0 :(得分:4)

尝试运行ls -l /home/user/public_html/images/location/并将输出添加到您的问题中。

这很可能是权限问题。 PHP可能没有对该文件的读访问权。

答案 1 :(得分:1)

在网上进行了大量搜索后,我自己找到了解决方案。希望它对其他人有所帮助: 确保apache httpd.conf中配置的用户和组与apache组和用户相同。

答案 2 :(得分:1)

也许,在文件的名称中有一个空白符号。这很重要。

答案 3 :(得分:0)

我也遇到了获得正确结果的问题。 事实证明,对我来说这是一个位于文件夹上的权限问题。 您必须确保文件夹具有Apache用户的eXecute权限。 为了解决这个问题,我在linux-box上做了这个: chmod g + x csv_files

亲切的问候 伊万