我有一个在服务器上创建文件和目录的脚本(Joomla)。问题是它在所有者 99 99 (nobody) 下创建它们,并且在没有服务器管理员帮助的情况下我无法通过 FTP 删除或修改它们之后。
我认为这是move_uploaded_file
php的功能。
WHM 或服务器管理员是否有解决此问题的方法?我可以修改 ftp 中的默认所有者吗?
我有一个在服务器上创建文件和目录的脚本(Joomla)。问题是它在所有者 99 99 (nobody) 下创建它们,并且在没有服务器管理员帮助的情况下我无法通过 FTP 删除或修改它们之后。
我认为这是move_uploaded_file
php的功能。
WHM 或服务器管理员是否有解决此问题的方法?我可以修改 ftp 中的默认所有者吗?
发生的情况是 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
您的 PHP 脚本以“nobody”用户身份运行(假设是“nobody”组),因此您从 PHP 创建的每个文件都将归“nobody”用户(和他的组)所有。用户可以是一个或多个组的一部分。
要解决权限问题,您的 FTP 用户和“nobody”必须在一个公共组中,假设管理员将您的用户放在“nobody”中。一旦他们在同一个组中,您的 PHP 脚本必须向“nobody”组成员授予“rw”(读/写)权限。为此:
chmod("path_to_your_file", 0770);
0770 相当于 "u+rwx,g+rwx,o-rwx" ,我在这里解释:
之后,您的 FTP 用户(现在属于“nobody”组)将对上传的文件具有读//写权限,因此也可以删除这些文件。它看起来像这样:
-rwxrwx--- 1 nobody nobody 12288 Oct 24 00:22 avatar.png
这不是对 unix 文件权限的理想介绍,但我希望这会有所帮助。
运行 PHP 的用户 - nobody
- 由系统管理员设置。你对此无能为力。
如果您知道 FTP 用户的 ID,您可以尝试chown()更改文件的所有者。但是,通常不允许您在 PHP 中执行此操作。
根据服务器上的组情况,如果您chmod
在文件上传后使用更改文件的访问权限,FTP帐户可以访问该文件:
先试试这个:
chmod($uploaded_file, 0660); // owner+group read+write
如果这不起作用,请尝试以下操作:
chmod($uploaded_file, 0666); // global read+write
其中之一应该使 FTP 帐户可以使用该文件。
非常不鼓励这样0666
做,因为服务器上的其他用户可以写入您的文件,但在某些配置中,这是开始的唯一方法。