Php5-fpm无法打开文件进行读取


php5-fpm can't open file for reading

我试图让我的php cgi进程从我的文件系统上的文件读取。该文件和父文件夹都具有所有允许的rwx权限,并且该文件具有与php进程相同的所有者和组id, www-data。

无论我如何尝试打开文件(read(), file_get_contents(), stream_get_contents()),我总是得到相同的错误:failed to open stream: Permission denied

在php交互式会话中打开文件,在命令行中使用cat或使用python都没有问题。

怎么回事?

我以前在启用SELinux的Linux系统上看到过这个问题。httpd进程通常有自己的安全上下文,只允许访问特定的文件。

您可以通过在文件和php脚本上运行ls --scontext来检查SELinux是否已启用。如果两个文件具有相同的上下文,或者如果ls抱怨参数,那么SELinux可能不是问题的原因。

假设SELinux是问题的原因,那么您可以尝试使用chcon命令将有问题的文件设置为具有与php脚本相同的安全上下文。例如:

chcon --reference=/var/www/html/page.php /data/filetoread

其中/var/www/html/page.php是你的php脚本,/data/filetoread是你想要访问的文件

原来这个文件是在一个FUSE文件系统下,没有使用allow_other选项挂载。