发生的情况是 HTTP 服务器由一个名为“nobody”的用户运行,而您的 FTP 用户是另一个用户。上传时,HTTP 服务器会在其用户名下创建文件,而您的 FTP 用户没有写入(或删除)这些文件的权限。
解决此问题的最简单方法(但并不真正安全)是将两个用户添加到同一组中,并更改文件权限以允许同一组的用户读取/写入这些文件。
您的管理员应该处理它,但您必须调用 chmod() 来更改上传文件的权限。
更好地解释一下:
linux/unix文件权限由用户(u)、组(g)和其他(o)权限组成。
我在这里只介绍 3 种类型的文件权限,即读 (r)、写 (w) 和执行 (x)。所以,你最终会得到这样的结果:
-rw-rw---x 1 jweyrich staff 12288 Oct 24 00:22 avatar.png
- 第一个 rw- 是拥有该文件的用户 (jweyrich) 的权限(读/写)。
- 第二个 rw- 是拥有该文件的 GROUP(staff)的权限(读/写)。
- 末尾的 --x 是其他用户的权限(执行)。
您的 PHP 脚本以“nobody”用户(以及“nobody”组)身份运行,因此您从 PHP 创建的每个文件都将归“nobody”用户(及其组)所有。用户可以是一个或多个组的一部分。
要解决权限问题,您的 FTP 用户和“nobody”必须处于一个common组,假设管理员将您的用户置于“nobody”中。
一旦他们位于同一组中,您的 PHP 脚本必须向“nobody”组成员授予“rw”(读/写)权限。为此:
chmod("path_to_your_file", 0770);
0770 相当于 "u+rwx,g+rwx,o-rwx" ,我在这里解释一下:
- u+rwx = 对于用户(所有者,即“nobody”),授予读/写/执行权限
- u+rwx = 对于组(也是“nobody”),授予读/写/执行权限
- o-rxw = 对于其他人,删除读/写/执行权限
之后,您的 FTP 用户(现在属于“nobody”组的一部分)将具有对上传文件的读//写访问权限,因此也可以删除这些文件。它看起来像这样:
-rwxrwx--- 1 nobody nobody 12288 Oct 24 00:22 avatar.png
这不是对 unix 文件权限的理想介绍,但我希望这会有所帮助。