即使所有父文件夹都是775,fopen也会失败(权限被拒绝)

时间:2018-02-15 16:57:52

标签: php centos fopen chmod

我尝试使用以下代码从PHP创建文件:

$config_file = fopen( '/home/the-user/domains/the-domain/public_html/the-folder/the-file.php', 'w');

此文件将在其中的文件夹由DirectAdmin创建。所以PHP通常无法访问此文件夹。因此,我将apache用户添加到DirectAdmin使用的用户组中。

我使用以下命令更改新创建的文件夹的权限:

exec('sudo chmod 775 /home/the-user/domains/the-domain/public_html/the-folder/');

即使完成了所有这些操作,我仍然会收到failed to open stream: Permission denied错误。

我查看了许多不同的帖子,我想我几乎没有成功地尝试过所有内容。

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

错误信息很明显PHP没有对文件的写访问权。既然你没有提到你正在运行的操作系统和网络服务器,我必须做出一些假设,因为这显然是Unix的命令将是相同的,但你使用的网络服务器将决定哪个 runuser 需要访问权限(以下示例将针对ubuntu上的apache)

因此请确保文件可由www-data用户/组写入。

exec('sudo chown www-data:www-data /home/the-user/domains/the-domain/public_html/the-folder/');

或通过命令行

chown www-data:www-data /home/the-user/domains/the-domain/public_html/the-folder/

这将更改该特定文件的用户/组。

要检查您的网络服务器正在运行的用户,您可以使用以下命令输出所有进程及其runuser的列表

ps auxf | more

要记住的另一件事是安全性偏离chmod 755,我不建议将此用于PHP文件作为一般经验法则我遵循这一点。

  

文件通常为644,文件夹为755.这是正常操作。

     

某些要标记为只读的文件通常设置为444或在某些情况下为400。