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