Apache+PHP 在 unix 上的写权限
Posted
技术标签:
【中文标题】Apache+PHP 在 unix 上的写权限【英文标题】:Apache+PHP write permissions on unix 【发布时间】:2011-01-16 18:24:36 【问题描述】:我正在尝试在 fedora 上使用 apache 启动 php 站点,但我遇到了关于写入权限的问题。看起来 apache 对某些文件夹没有写权限,但我不明白为什么。
我检查了 httpd.conf,它有组:apache,用户:apache。 然后我做了: chown -R apache:apache www 并为文件夹设置 777 权限,但它仍然说:
警告:file_put_contents(/var/www/public/temp.txt) [function.file-put-contents]:无法打开流:/var/www/public/newtest.php 第 8 行的权限被拒绝
请指教。
更新: 顺便说一句,如果我从命令行创建“php newtest.php”,则文件 temp.txt 是使用组 root 和用户 root 创建的。它只是在浏览器中不起作用。
【问题讨论】:
文件temp.txt
的权限呢?
temp.txt 是我要创建的新文件,它还不存在
【参考方案1】:
将 chmod 775 转换为 newtest.php ;)
【讨论】:
正如我已经提到的,我对整个文件夹(当然包括 newtest.php)做了 777。 temp.txt 是我要创建的一个新文件,它还不存在。【参考方案2】:ls -la /var/www/public
只是为了检查:-)
【讨论】:
好的,文件夹本身有这个:drwxrwxrwx 8 apache apache 4096 2010-02-13 04:08 public 我正在执行的文件:-rwxrwxrwx 1 apache apache 213 2010-02-14 06: 34 新测试.php 很奇怪。您确定 temp.txt 不存在吗?另外,如果你尝试“sudo -u apache echo test > /var/www/public/temp.txt”会发生什么? 是的,它不在那里。当我启动您建议的命令时(在根目录下),它已经创建了它,但是当我再次尝试我的 PHP 脚本时,即使文件在那里,它仍然显示相同的错误。我确定它与 apache 权限有关,但不确定到底是什么.. 嗯。其他原因可能是在 php.ini 或 apache config 或 .htaccess 中启用了 safe_mode 或 open_basedir 选项。但我认为它们应该产生稍微不同的警告。 ***.com/questions/1870875/… - 也许同样的问题? :-)【参考方案3】:我建议将 apache 切换到 mod_itk 作为 mpm,并以所有者文档根目录的权限运行特定的 vhost,并包含 php 脚本。
【讨论】:
在 Apache 中至少有一个通常配置的默认虚拟主机。您可能想尝试在那里设置虚拟主机所有者。但是您可能还想改进您的问题,因为 mod_itk 在单个 vhost 设置中太过分了,那时我不会建议这样做。 ;-)【参考方案4】:警告:file_put_contents(/var/www/public/temp.txt) [function.file-put-contents]:未能打开流:/var/www/public/newtest.php 第 8 行中的权限被拒绝
这里有很多不好的东西。
让我们从您确实希望将 httpd 可写文件远离您的代码的事实开始 - 当然是在一个单独的目录中,最好完全在文档根目录之外。
chown -R apache:apache www 并为文件夹设置 777 权限
您事后检查过实际的权限是什么吗?顺便说一句,也请参阅上面的观点 - 如果您已经让每个人都可以编写整个网站,那么您只是在自找麻烦。您当然不能同时更改所有者和权限。
您是否启用了 SELinux? (以 root 身份运行 sestatus)。如果是这样,那么您需要禁用它或学习如何配置它 - 但我建议您先掌握老式权限,然后禁用 SELinux。
C.
【讨论】:
好的,我知道777不是存储文件的方式,但是为了解决问题我不得不尝试一切。我现在禁用了 SELinux。 sestatus root 现在显示“SELinux 状态:已禁用”,但问题仍然存在 :( 有什么想法吗? 啊不,实际上它有帮助,只是在这里有具有 root 权限的旧文件。非常感谢以上是关于Apache+PHP 在 unix 上的写权限的主要内容,如果未能解决你的问题,请参考以下文章
我可以将unix权限存储在zip文件(由apache ant构建)中吗?