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

标签 linux php

我试图让我的 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/

相关文章:

从 X11 应用程序干净退出?

php - PHP 和 Mysql 条件查询

php - PHP 中的 setcookie 能否产生多个 "Set-Cookie" header ?

ruby - 更改顶部的 ruby​​ 进程名称

javascript - 自定义用户链接如何工作?

php - WHMCS,我怎样才能只运行一次代码

php - 使用 include_partial() 部分传递 symfony 1.4 的对象?

linux - 安全模式如何访问安全/非安全内存?

没有 JRE 的 JavaFX DEB 包不起作用

c - 当通过 Socket 发送数据时,send/write 何时返回 -1?