无法在 CentOS 7 上的 PHP 中打开 file_put_contents 上的流

Failed to open stream on file_put_contents in PHP on CentOS 7

我知道这是很多线程的常见错误,但我已经厌倦了搜索,但我仍然没有解决它。当我尝试 运行 函数 file_put_contents 时,出现以下错误:

Warning: file_put_contents(test.txt): failed to open stream: Permission denied in /var/www/html/nurses/adminWriter.php on line 29

我已经完成了最常见的答案,更改 nurses 文件夹和 test.txt 文件的权限到 777。那没用。

我目前正在全新安装最新的 CentOS 7 服务器。

我发现如果我通过控制台 运行 php 脚本:

# php /var/www/html/nurses/adminWriter.php

它工作得很好,我只有在通过浏览器 运行 时才收到错误,但我真的需要这样 运行 它。

此致!

好的,我发现了问题:selinux

解决方法如下: http://kb.sp.parallels.com/en/11142

如果页面出现故障:

症状

更改默认目录以存储网站内容(例如,“/home”)后,您将无法通过 Web 访问子域和其他网站的内容。

原因

如果 SELinux 在“Enforcement”模式下工作,就会出现此问题。在这种模式下,网站的 webroot 目录和其中的子域具有不同的权限,您的 Web 服务器无法访问它们。 运行 这个命令:

# getenforce

输出应该是:Enforcing

分辨率

禁用 SELinux 支持:在任何编辑器中打开文件 /etc/selinux/config 并找到这一行:

SELINUX=<value>

改为:

SELINUX=disabled

如果你找不到这个文件,在任何编辑器中打开文件/boot/grub/grub.conf,然后将参数selinux=0添加到Grub Boot Loader:

title SE-Linux Test System
root (hd0,0)
kernel /boot/vmlinuz-2.4.20-selinux-XXXXXXXXXX ro root=/dev/hda1 nousb selinux=0
#initrd /boot/initrd-2.4.20-selinux-XXXXXXXXXX.img

重新启动服务器以应用更改。 如果你不想重启,运行这个命令:

# setenforce 0
chcon -Rv --type=httpd_sys_rw_content_t /dir

这可能会有所帮助,而不是关闭 selinux。