1

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

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

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

到底是怎么回事?

4

2 回答 2

1

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

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

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

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

/var/www/html/page.php您的 php 脚本在哪里,并且/data/filetoread是您要访问的文件。

于 2013-05-09T03:18:47.593 回答
0

事实证明,该文件位于未使用该allow_other选项安装的 FUSE 文件系统下。

于 2013-05-09T18:33:04.037 回答