【问题标题】:PHP fopen() Permission deniedPHP fopen() 权限被拒绝
【发布时间】:2020-09-30 08:25:33
【问题描述】:

我是一名 PHP 学习者,我正在处理文件,但我无法在自己的服务器中打开文件,因为出现“权限被拒绝”错误。我正在使用fopen() 函数:fopen('file.txt', 'r+');

我在 CentOS 中使用 Apache 2.4.37 和 PHP 7.2.11。我在互联网上搜索了很多但没有任何效果,我安装了 fpm,我尝试使用其他 PHP 版本,我检查 allow_url_fopen 是否打开,我重新安装了 PHP 和 Apache,我确保所有权限都正常。我还安装在其他 CentOS 的 VM 中,但问题也出在它上面,然后我尝试使用 Ubuntu,它运行良好,但我的服务器在 CentOS 中运行。

【问题讨论】:

  • 您是从网页运行它吗?网络服务器用户 ID 需要具有读取权限。该用户名通常类似于 www-user 或 www-data。
  • 你使用什么样的路径?相对(即:../folder/myimage.jpg)还是绝对(即:http://www.mywebsite.com/folder/myimage.jpg)?
  • 是的,我正在从网页运行代码,但整个文件夹归 Web 服务器用户名所有,CentOS 中的组是 httpd,所有文件的权限都在 777 中设置。
  • 我使用的是相对路径,因为 txt 文件与 php 代码位于同一文件夹中。但是,使用像 '/var/www/html/file.txt' 这样的绝对路径也不起作用。
  • 您是否尝试过 file_get_contents 来查看是否可行?如果你使用 unlink('file.txt');文件会被删除吗?如果不是,你的权限肯定不正确。

标签: php apache centos


【解决方案1】:

好的,我已经搜索了一整天,但最终我解决了它。问题在于 SELinux。

我不知道为什么,但是 SELinux 默认进入强制模式,但是当我关闭它时,一切都解决了。如果您出于安全原因不想将其关闭,您可以设置权限,但对于初学者用户来说这是一种高级理解。我在这里找到了如何设置这些权限: https://serverfault.com/a/819370

如果你不想对抗 SELinux,你可以通过编辑 /etc/sysconfig/selinux 并在 SELINUX= 后面加上 permissive(推荐)或 disabled 来关闭它

如果您想了解更多关于 SELinux 的信息,DigitalOcean 有一篇关于这方面的精彩帖子:https://www.digitalocean.com/community/tutorial_series/an-introduction-to-selinux-on-centos-7

【讨论】:

  • 关闭 CentOS 提供的最好的东西是你能做的最糟糕的事情。相反,您应该正确配置它。
  • @emix SELinux 适用于系统管理员或高级 linux 用户。如果您想让它保持打开状态,我提供了一个指向设置的链接和有关它的更多信息,我认为如果有人来此帖子搜索帮助,他们可能不了解 SELinux 并且不需要它。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多