file_exists()在AWS ec2服务器上不工作,即使在开发服务器和文件上工作


file_exists() not working on AWS ec2 server, even though works on dev server and file is where it is

我在Amazon ec2服务器上安装了一个buddypress,运行默认的Debian linux,安装了wordpress和buddypress。用户试图上传头像,但无法调整头像大小。这是因为在buddypress中调整虚拟角色大小的代码中,调用file_exists($original_file)返回false,即使我可以看到该文件正好位于它应该位于的目录中。

这不是一个问题,在我们的开发服务器,上传头像工作完美无瑕。下一行代码是导致调整大小失败的原因。

$original_file = '/var/www/html/wp-content/uploads/avatars/1/test-picture.png';
if(!file_exists($original_file)
    return false; 

现在我在那个目录下ssh,可以看到那个路径是绝对正确的。我猜这是一个问题与php权限?能够访问该目录并看到该文件实际上不存在。

所有文件现在归apache:apache所有。我已经尝试了chmod 775和777,但仍然php无法识别文件。有人知道如何在Amazon ec2服务器上配置php以便它能识别文件的存在吗?

如果你正确地粘贴了上面的代码,你将得到一个语法错误,它将显示在你的syslog日志中,你在你的if语句中缺少一个关闭的)

你的代码应该是这样的:

$original_file = '/var/www/html/wp-content/uploads/avatars/1/test-picture.png';
if(!file_exists($original_file))
    return false;

一个可能的原因是大小写敏感。您声明您的生产服务器运行linux,它是区分大小写的。如果您的开发服务器是mac,那么您很可能使用不区分大小写的文件系统。

可能的解决方案:保护所有的图像在全小写和用户小写目录。呼叫file_exists时,对文件名呼叫strtolower

如果您在windows机器上开发,您可能会使用'作为目录分隔符。

可能的解决方案:始终使用/作为目录分隔符,因为它可以在所有系统上工作。

当保存到文档根目录之上的文件夹时,您是否有这些问题?