就像许多PHP服务器一样,你会认为这个主题会有更多的指导。
乔开始作为一个新的Ubuntu电脑的快乐拥有者。
乔在咖啡里喜欢Ubuntu。 乔想用PHP构build一个网站。 Joe apt-get的数百个和数百个库试图设置Apache,PHP和MySQL。 乔终于得到了PHP安装日出敲可怜疲惫的乔出来。
乔醒来与PHP工作。 乔开始写代码。 乔得到PHP无法创build文件的错误。
这让乔感到困扰。
乔天真地CHMOD的/ var / www目录0777. PHP的作品和乔很高兴。 几分钟后,当PHP尝试写入另一个文件时,Joe也有同样的问题。
乔意识到这是不好的。
乔发现chown和一个被称为www-data的组。 乔颠倒了他的CHMOD,并将/ var / www包装成www-data。 但是,PHP仍然无法正常工作。 PHP是没有人的 。
乔回去为麦当劳工作,意识到有没有写PHP代码的希望。
除非你的PHP进程在创build/ var / www中的每一个单独的文件,否则chown'ing / var / www到www-data是一个坏主意。 我打赌Joe已经在/ var / www下创build了一个目录结构,他的PHP进程正在尝试写入除www-data以外的其他人所拥有的目录之一。 您应该只将www-data分配给您需要写入的目录 – 其他分支最好归属于Web服务器无法写入的目录。
尼古拉斯看到乔的查询,并build议可能创build一个单独的目录,PHP可以写入。 他指出,如果Joe不打算让Apache直接从它提供文件,那么该目录不应该在Apache服务的任何地方。
他还指出,在基于Debian的发行版中 – 比如Ubuntu – Apache(因此也是PHP)几乎总是以www-data的forms运行,并且表明如果PHP下运行的Apache无法写入该组可写的目录,则会发生奇怪的事情。
重读,尼古拉斯还build议使得Joe希望写入的文件夹属于组 www-data(chgrp www-data $文件夹),然后由该组写入,因为他认为当PHP运行时它可能是www的成员-data而不是以该用户身份运行。
Nicholas指出,在Apache下的Ubuntu上安装PHP的过程不应该比“apt-get install apache2 libapache2-mod-php5 php5 php5-mysql”和“sudo a2enmod php5”复杂得多,如果Joe不得不更糟糕的是,这可能是一些根本性的错误,搞砸了PHP正在运行。
尼古拉斯指出,这篇文章的一些听起来比绝对必要的光顾,并指责inheritance的第三人称格式。
Joe知道PHP脚本试图写入的目录吗? 该目录需要www-data权限才能写入。