2

我有一个在服务器上创建文件和目录的脚本(Joomla)。问题是它在所有者 99 99 (nobody) 下创建它们,并且在没有服务器管理员帮助的情况下我无法通过 FTP 删除或修改它们之后。

我认为这是move_uploaded_filephp的功能。

WHM 或服务器管理员是否有解决此问题的方法?我可以修改 ftp 中的默认所有者吗?

4

2 回答 2

3

发生的情况是 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(员工)的权限(读/写)。
  • 最后的 --x 是 OTHERS 用户的权限(执行)。

您的 PHP 脚本以“nobody”用户身份运行(假设是“nobody”组),因此您从 PHP 创建的每个文件都将归“nobody”用户(和他的组)所有。用户可以是一个或多个组的一部分。

要解决权限问题,您的 FTP 用户和“nobody”必须在一个公共组中,假设管理员将您的用户放在“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 文件权限的理想介绍,但我希望这会有所帮助。

于 2010-04-09T12:38:24.343 回答
1

运行 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做,因为服务器上的其他用户可以写入您的文件,但在某些配置中,这是开始的唯一方法。

于 2010-04-09T12:33:12.100 回答