gpt4 book ai didi

php - 为什么 file_put_contents 从浏览器运行时有权限问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:53 26 4
gpt4 key购买 nike

这个问题已经被问过几次了,但我还没有找到解决方案。我有一个 Fedora 19 LAMP 服务器,我只想运行简单的命令:file_put_contents('test.txt', 'Hello there'); 以确认我的网络服务器可以使用 PHP 来将数据写入文件。我无法找出合适的权限方案。首先,仅出于开发目的,Apache 的文档根目录是 /var/www/html。该目录最初由名为 www-data 的用户和组所有,但我将该目录的组更改为 httpd 进程所有者的主要组,名为 apache。这个所有者在 PHP 运行时处于事件状态。我已经通过以下内容确认了这一点:

enter image description here

如您所见,进程所有者是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 一起使用时,它的工作方式与我预期的一样,前提是我输入命令的用户或其组具有对该目录或测试文件的写入权限。

enter image description here

因此,从命令行中,您可以看到 www-data 如何对我所在的文件夹具有读取、写入和执行权限。posix_getpwuidposix_geteuid 帮助您找到 Apache/PHP 进程的所有者,在本例中与登录到控制台的用户相同。 file_put_contents 成功将 8 个字节写入指定文件。如果我将组或所有者和组更改为其他内容,我会得到 Permission denied,这绝对是有道理的。

如果这在命令行上有效,那么为什么不在我真正想要的时候,即在实际提供网页服务时呢???

最佳答案

因为您忘记阅读 httpd_selinux(8) 手册页并为目录提供适当的文件上下文以允许 Web 服务器在那里写入文件。

关于php - 为什么 file_put_contents 从浏览器运行时有权限问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20283626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com