在 php 中对 777 权限文件执行 fopen 时权限被拒绝

在 php 中对 777 权限文件执行 fopen 时权限被拒绝

我对 php 或文件权限并不陌生。但我刚刚将一个非常简单的脚本迁移到我设置的新服务器。

脚本运行的文件夹位于文档根目录中。该文件夹的权限设置为 755。

文件夹的所有者是 gsta。文件的所有者是 gsta。

我打开了 error_reporting 并收到:

Warning: fopen(log.txt): failed to open stream: Permission denied in /var/www/html/log.php on line 13

我试过了:

chmod("log.txt", 0777)

在 php 中也得到权限被拒绝。

我已经搞定了:

ps -u | grep httpd

并得到:

gsta      1012  0.0  0.0 108608   808 pts/3    S+   22:45   0:00 grep --color=auto httpd

代码:

$filename = 'log.txt';
$handle = fopen($filename,"a+");
echo "fh:" . fwrite($handle, $payload . "\n") . $handle . "<br/>";
fclose($handle);

尽管这无关紧要,但 PHP 安全模式已关闭

我尝试将文件的所有者设置为 nobody (apache 通常在 nobody 下运行,我也尝试将所有者设置为 apache。

我查看了谷歌上的每篇帖子,都是一些基本的东西,我都试过了。这是另一个服务器上已知的工作脚本。我尝试检查 php.ini 以寻找会导致此问题的某些设置。我尝试删除该文件(因为在这种情况下应该会创建它)

有人有什么想法吗?我已经尝试了所有我能想到的方法。

答案1

是否有可能某些安全工具(例如 SELinux)阻止了这些操作?

我遇到了类似的问题,setenforce 0关闭 SELinux 的命令成功解决了该问题。

答案2

httpd 或 apache 用户不同。使用以下脚本检查 apache 用户名

<?php echo exec('whoami'); ?>

答案3

我不知道它可能是什么,但是你已经尝试在脚本中创建文件。只需重命名该文件,确保 fopen 设置为读写模式(a 应该没问题)并让 php 为你创建它。

如果不起作用,则说明您的文件夹权限错误,请尝试将文件夹设置为 777

在我的机器上,出于某种原因,我必须在 chmod 中使用两个零,即 00777

答案4

“log.txt”你确定你设置为 777 的文件是同一个吗?如果没有路径,如果页面认为它是从你网站的根目录而不是你所在的目录运行的,那么你可能会得到错误,有些调用往往还需要目录具有写权限 - 我认为我从来没有弄清楚为什么有些需要,有些不需要。

相关内容