我试图让我的php cgi进程从我的文件系统上的文件中读取。文件和父文件夹都允许所有rwx权限,文件与php进程,www-data具有相同的所有者和组ID。
无论我如何尝试打开文件(read(),file_get_contents(),stream_get_contents()),我总是得到同样的错误:
failed to open stream: Permission denied
我在php交互式会话中打开文件没问题,在命令行上使用cat或者使用python打开文件。
发生了什么事?
答案 0 :(得分:1)
我之前在启用了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
是您要访问的文件。
答案 1 :(得分:0)
事实证明,此文件位于未使用allow_other
选项安装的FUSE文件系统下。