为什么在浏览器中运行时file_put_contents有权限的问题?(Why does file_

2019-10-19 02:17发布

这个问题已经被问了几次,在这里,但我还没有找到一个解决办法。 我有Fedora 19 LAMP服务器,我只是想运行简单的命令: file_put_contents('test.txt', 'Hello there'); 为了证实我的Web服务器可以使用PHP将数据写入到文件中。 我无法找出一个适当的权限方案。 一开始,只是为了发展,Apache的文档根目录是/var/www/html 。 该目录最初是由用户和组称为拥有www-data ,但我改变了目录的组httpd进程的拥有者,命名的主组apache 。 正是这种老板是活动PHP运行时。 我用下面的证实了这一点:

正如你看到的,过程的所有者是apache ,当前猪病是/var/www/html/php-console 。 该目录由拥有www-data和该组的成员apache有充分的机会来了。

我曾尝试以下让PHP实际创建在这个位置的文件,但无济于事:

chmod 777 /var/www/html/php-console

chown apache /var/www/html/php-console
chgrp apache /var/www/html/php-console

cd /var/www/html; > test.txt; chmod 777 test.txt;

而这个脚本是从浏览器中运行任何方法都行不通。 然而,当我使用file_put_contents与PHP CLI,它的工作原理就像我所期望的,前提是用户,我输入命令为或其组具有写权限,该目录或测试文件。

因此,在命令行,你怎么看www-data具有读,写和执行权限给我英寸我的文件夹posix_getpwuidposix_geteuid帮你找到的Apache / PHP进程的所有者,在这种情况下是一样的用户登录到控制台。 file_put_contents成功地写入的8个字节,以指定的文件。 如果我的组或所有者和组更改为别的,我得到许可被拒绝,这绝对是有道理的。

如果这个工程在命令行上,那么为什么不是我真正想要它,即,而实际上网页服务???

Answer 1:

因为你忘了阅读httpd_selinux(8)手册页和给予的目录中相应的文件上下文允许web服务器有写入文件。



文章来源: Why does file_put_contents have permission issues when run from the browser?