【问题标题】:apache php file_put_contents permission deniedapache php file_put_contents 权限被拒绝
【发布时间】:2014-04-10 20:41:41
【问题描述】:

由于权限被拒绝,php脚本无法创建文件。

PHP 脚本:

<?
echo exec('whoami');
file_put_contents('/var/www/html/sample.txt','Some random Text');
?>

输出:

apache
**Warning**: file_put_contents(/var/www/html/test/samds.txt): failed to open stream: Permission denied in **/var/www/html/index.php** on line **3**

目录权限都是777

【问题讨论】:

  • 尝试使用相对路径而不是 file_put_contents('sample.txt'... 和 (a sidenote) 确保短标签处于“打开状态”。或 file_put_contents('test/samds.txt'... 根据您的错误消息和从 root 运行的代码。
  • 另外,您的错误与上面的 file_put_content 文件路径不匹配 - 错误表示您正试图将其放入 /var/www/html/test/samds.txt,但您的代码显示不同。请告诉我们您使用什么代码来获取该错误。
  • ^ 忽略这个故障。我写了一个示例脚本。
  • @Fred-ii- 不,我已经尝试过相对路径。
  • 我在我的服务器上测试了你的代码,它工作正常。您是在本地机器上运行它,还是在托管站点上运行它? @Pranjal 并尝试将文件夹权限更改为 755

标签: php apache folder-permissions


【解决方案1】:

我有同样的问题,我放错了一些配置。首先请记住,创建 php 文件的用户可以读取该文件,如果创建 php 文件的用户与您的情况下的 apache 用户不同,则为 apache在这种情况下,如果您尝试从不同的用户写入,您将得到此异常。所以您要做的很简单,我建议您撤销777 权限,因为我不喜欢您的文件可以公开在对世界进行读写时,将其恢复到 755 并在服务器的命令行上执行下一步。

cd /var/www

仅更改 HTML 的用户,因为我们只需要它是可写的,所以不要触摸 var 和 www,所以基本上一旦你导航到他的 www 目录,你就会将 HTML 目录所有者更改为当前正在运行 apache 服务器的人,并且您已经获得了该信息,在您的情况下,它是 apache,所以我们要做下一个,

chown apache:apache html

在这个阶段,html 文件的所有者将是 apache,所以你可以在上面写。无论如何,同时我强烈建议你在 html 中创建单独的目录,比如说testDir 并在那里尝试,我不建议更改根文件夹权限,我对它们有不好的体验。无论如何,我希望它会有所帮助,因为我遭受了一个多小时的痛苦,并且刚刚找到了正确的方法。这解决了我的问题,希望它也能解决你的问题。 !

【讨论】:

  • chown:无效用户:'apache:apache'