发生的情况是 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) 的 USER 的权限(读/写)。
- 第二个 rw- 是拥有该文件的 GROUP(员工)的权限(读/写)。
- 末尾的 --x 是 OTHERS 用户的权限(执行)..
您的 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 文件权限的理想介绍,但我希望这会有所帮助。