与现有的 PHP 服务器一样多,您会认为会有更多关于此主题的指南。
乔一开始是一台新的 ubuntu PC 的快乐所有者。
Joe 在他的咖啡中喜欢 Ubuntu。Joe 想使用 PHP 建立一个网站。Joe apt-get 的数百个库试图设置 Apache、PHP 和 MySQL。Joe 终于安装了 PHP,因为日出让疲倦的 Joe 昏倒了。
乔醒来发现 PHP 正在工作。乔开始编写代码。Joe 收到 PHP 无法创建文件的错误。
这让乔很困扰。
Joe 天真地 CHMOD 将 /var/www 目录更改为 0777。PHP 工作正常,Joe 很高兴。几分钟后,当 PHP 尝试写入另一个文件时,Joe 遇到了同样的问题。
乔意识到这很糟糕。
Joe 发现了 chown 和一个名为 www-data 的组。Joe 反转他的 CHMOD 并将 /var/www 更改为 www-data。但是,PHP 仍然无法工作。PHP 是没有人的。
Joe 回到麦当劳工作,意识到编写 PHP 代码是没有希望的。
Nicholas 看到 Joe 的查询,并建议创建一个 PHP 可以写入的单独目录。他指出,如果 Joe 不打算让 Apache 直接从中提供文件,那么该目录不应位于 Apache 提供服务的任何位置下。
他还指出,在基于 Debian 的发行版(如 Ubuntu)下,Apache(以及 PHP)几乎总是作为 www-data 运行,并暗示如果在 apache 下运行的 PHP 无法写入该组可写的目录,那么某处会发生一些奇怪的事情。
重读,Nicholas 还建议让 Joe 希望写入的文件夹属于组www-data (chgrp www-data $folder),然后可由该组写入,因为他认为当 PHP 运行时,它可能是 www 的成员-data 而不是以该用户身份运行。
Nicholas 指出,在 Apache 下的 Ubuntu 上安装 PHP 的过程不应该比“apt-get install apache2 libapache2-mod-php5 php5 php5-mysql”然后“sudo a2enmod php5”复杂多少,如果 Joe 不得不搞砸的不止于此,有可能根本上是错误的事情搞砸了 PHP 正在运行的东西。
Nicholas 指出,这篇文章的某些内容听起来比绝对必要的更加傲慢,并指责继承的第三人称格式。
除非您的 PHP 进程负责创建位于 /var/www 中的每个文件,否则将 /var/www 更改为 www-data 是一个坏主意。我敢打赌,Joe 已经在 /var/www 下创建了一个目录结构,并且他的 PHP 进程正试图写入由 www-data 以外的人拥有的目录之一。您应该只 chown www-data 您需要写入的目录 - 最好将其他目录保留为 Web 服务器无法写入的内容。
Joe 知道 PHP 脚本试图写入哪个目录吗?该目录需要 www-data 权限才能写入。