我对 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 的文件是同一个吗?如果没有路径,如果页面认为它是从你网站的根目录而不是你所在的目录运行的,那么你可能会得到错误,有些调用往往还需要目录具有写权限 - 我认为我从来没有弄清楚为什么有些需要,有些不需要。