Apache + PHP在unix上的写入权限

问题描述:

我想在fedora上启动apache的PHP站点,并且我有关于写入权限的问题。它看起来像apache没有写入权限的一些文件夹,但我不明白为什么。Apache + PHP在unix上的写入权限

我检查了httpd.conf,它有组:apache,user:apache。 然后我提出: CHOWN -R阿帕奇:apache的www和设置777次的权限的文件夹,但它仍然表示:

警告:file_put_contents(/var/www/public/temp.txt)功能。 file-put-contents]:未能打开流:第8行的/var/www/public/newtest.php中的权限被拒绝

请指教。

更新: 顺便说一句,如果我从命令行制作“php newtest.php”,文件temp.txt是由组root和root用户创建的。它只是不适合浏览器。

+1

怎么样的文件'temp.txt'的权限? – 2010-02-14 19:03:16

+0

temp.txt是我想要创建的一个新文件,它现在还不存在 – 2010-02-14 19:35:02

警告:file_put_contents(/var/www/public/temp.txt)[function.file-put-contents]:未能打开流:在/var/www/public/newtest.php上的权限被拒绝第8行

这里有太多不好的东西。

让我们从真正想要保持httpd可写文件远离代码的事实开始吧 - 当然是在一个单独的目录中,最好在文档根目录之外。

乔敦 - R的阿帕奇:阿帕奇WWW和设置777级权限的文件夹

而且你检查以后的权限实际上是?顺便说一句,请参阅上面的问题 - 如果您已将整个网站设置为可由所有人写入,那么您只是在寻求麻烦。你肯定不会改变主人和权限。

您是否启用了SELinux? (以root身份运行sestatus)。如果是这样,那么你需要禁用它或者学习如何配置它 - 但是我建议你先去处理老式的权限,然后禁用SELinux。

C.

+0

好吧,我知道777不是存储文件的方式,但为了解决问题,我必须尝试一切。我现在禁用了SELinux。 sestatus根目前显示“SELinux状态:禁用”,但问题仍然存在:(任何想法? – 2010-02-15 19:56:16

+0

啊不,实际上它帮助,只是在这里有根权限的旧文件。 – 2010-02-15 20:08:03

化妆搭配chmod 775 newtest.php;)

+0

正如我已经提到的,我对整个文件夹(当然包括newtest.php)做了777个。 temp.txt是我想创建的一个新文件,它现在还不存在。 – 2010-02-14 19:34:40

LS -la在/ var/WWW /公共

只是为了检查:-)

+0

好了,文件夹本身具有这样的: drwxrwxrwx 8阿帕奇阿帕奇4096 2010-02-13 04:08公众 文件我执行: -rwxrwxrwx 1阿帕奇阿帕奇213 2010-02-14 06:34 newtest。 php – 2010-02-14 20:42:53

+0

奇怪。你确定temp.txt不在吗? 另外,如果您尝试“sudo -u apache echo test> /var/www/public/temp.txt”会发生什么? – Qwerty 2010-02-14 20:56:49

+0

是的,它不在那里。当我启动你建议的命令(在root下)时,它已经创建了它,但是当我再次尝试我的PHP脚本时,即使文件存在,它仍然显示相同的错误。我确定它与apache权限有关,但不知道究竟是什么.. – 2010-02-14 21:11:51

你试图去触摸TEMP.TXT和公正更改file_put_contents()并添加FILE_APPEND标志?

+0

任何文件操作都会给出许可权限错误,所以无论我做什么:file_put_contents,fwrite,imagepng - 都会给出类似的错误。触摸返回这个: 警告:touch()[function.touch]:Utime失败:权限被拒绝在/var/www/public/newtest.php在第6行 – 2010-02-14 21:52:10

+0

我的意思是shell touch命令... – f13o 2010-02-14 22:56:18

+0

反正这不帮帮我。我需要能够创建文件,而不仅仅是修改它。 – 2010-02-14 23:33:43

我建议将apache切换为mod_itk作为mpm,并使用所有者文档根目录的权限运行特定的vhost并包含php脚本。

+0

这应该如何解决我的问题?我并不真的需要这里的虚拟主机.. – 2010-02-14 22:25:25

+0

在Apache中至少有一个默认的虚拟主机通常配置。你可能想尝试在那里设置vhost所有者。但是你可能也想改进你的问题,因为mod_itk在单个虚拟主机设置中是过度的,我不会那么建议它。 ;-) – hurikhan77 2010-02-14 22:27:54