我试图让我的 php cgi 进程从我的文件系统上的文件中读取。文件和父文件夹都允许所有 rwx 权限,并且文件具有与 php 进程相同的所有者和组 ID,www-data。
无论我如何尝试打开文件(read()、file_get_contents()、stream_get_contents()),我总是得到同样的错误:
无法打开流:权限被拒绝
我在 php 交互式 session 中打开文件、在命令行上使用 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
是您要访问的文件。
关于linux - php5-fpm 无法打开文件进行读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453083/