2013-05-09 117 views
1

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

无论我怎样尝试打开该文件(阅读(),file_get_contents()函数,stream_get_contents()),我总是得到同样的错误: failed to open stream: Permission denied

我没有问题,在PHP交互打开文件会话,在命令行上使用cat,或使用python。

这是怎么回事?

+0

如果你sudo su www-data然后通过CLI-php运行脚本会发生什么? – 2013-05-09 02:32:22

+0

权限被拒绝!这里发生了什么?文件和文件夹都有777个权限。 – cachance7 2013-05-09 03:13:42

+0

此外,链上的所有父文件夹也设置了777个权限。 – cachance7 2013-05-09 03:34:14

回答

1

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

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

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

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

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

+0

我试过'ls --context '这个脚本和我正在尝试读取的文件,但是这两种尝试都导致了'? '。我不认为SELinux在这里玩... – cachance7 2013-05-09 03:32:40

0

事实证明,这个文件是在一个FUSE文件系统下,它没有与allow_other选项一起安装。