8

我在file_exists()Linux 服务器上的 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

4 回答 4

4

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

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

于 2011-01-08T16:16:30.110 回答
1

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

于 2013-03-25T15:45:53.093 回答
1

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

于 2014-09-22T13:45:25.240 回答
0

我也无法获得正确的结果。事实证明,这对我来说是文件夹上的权限问题。您必须确保文件夹具有 Apache 用户的执行权限。为了修复它,我只是在我的 linux-box 上做了这个:chmod g+x csv_files

亲切的问候伊万

于 2016-09-07T13:33:45.463 回答