从Apache运行的PHP无法写入文件系统


PHP running from Apache cannot write to filesystem

当从Apache网络服务器运行时,我无法让PHP将文件写入文件系统。

我有一个简单的PHP脚本:

<?php
print 'User : '.posix_getpwuid(posix_getuid())['name'];
print ' ';
print 'Group: '.posix_getgrgid(posix_getgid())['name'];
file_put_contents('./test.txt', 'OK');
?>

我以用户ec2-user:ec2-user身份登录,仅用于测试 Apache 是否以ec2-user:ec2-user运行。

ec2-user属于以下组:

>groups
ec2-user adm wheel systemd-journal www

该脚本位于 Apache 文档根目录中。

/var/www/html/test.php
drwxr-xr-x.  21 root root 4096 ene 31 05:45 var
drwxrwsr-x.  4 root www    31 ene 29 17:30 www
drwxrwsr-x. 2 root www 36 ene 31 06:16 html
-rw-rw-r--. 1 ec2-user www 172 ene 31 06:15 test.php

如果运行脚本 PHP cli,则会创建文件test.txt并生成以下输出。

>php ./test.php
User : ec2-user Group: ec2-user

但是,如果我通过浏览器将脚本作为普通网页或通过 curl 调用,则会出现文件权限错误:

> curl http://my.ip/test.php
User : ec2-user Group: ec2-user<br />
<b>Warning</b>:  file_put_contents(./test.txt): failed to open stream:     Permission denied in <b>/var/www/html/test.php</b> on line <b>5</b><br />

我也尝试将 Apache 作为ec2-user:www运行,但输出是相同的:

User : ec2-user Group: www
Warning: file_put_contents(./test.txt): failed to open stream: Permission denied in /var/www/html/test.php on line 6

我已经检查了PHP配置,没有配置open_basedir选项。

我尝试写入具有777权限和相同输出的/dummy文件夹。

我缺少任何配置吗?

检查是否

启用了 selinux

selinuxenabled && echo enabled || echo disabled

如果已启用,请尝试禁用

echo 0 > /selinux/enforce