2011-01-08 60 views
7

我在Linux服务器上的file_exists() PHP函数有一个奇怪的问题。PHP file_exists()在某些文件上返回false

使用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等等,所以它对陌生人物或空间来说不是问题。
[[email protected] ~]# 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 
[[email protected] ~]# 

我试图与权限777和755这有什么区别。例如在这个文件夹中,1和2可能工作,而3 & 4不要...

我跑了一个快速测试,看看apache/php的运行和他们没有运行,但没有解释为什么有些图像可以工作,有些则没有完全相同的权限。

编辑2:问题解决了。不能相信它有多愚蠢,从数据库中调用的一些文件名在最后有空格......制作原始脚本的人在保存之前没有进行任何清理。

+0

是文件居然有?您可能会因缓存而看到图片。 – 2011-01-08 16:17:02

+0

您是否启用了safe_mode? – Mchl 2011-01-08 16:20:38

回答

4

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

这很可能是一个权限问题。 PHP可能没有读取文件的权限。

1

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

1

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

0

我也遇到了取得正确结果的问题。 事实证明,它对我来说是一个权限问题位于该文件夹。 您必须确保文件夹具有Apache用户的eXecute权限。 要解决,我只是这样做对我的Linux盒: 搭配chmod G + X csv_files

亲切的问候 伊万