php函数导致FTP中无人拥有(99 99)?

php函数导致FTP中无人拥有(99 99)?,php,joomla,ftp,file-ownership,Php,Joomla,Ftp,File Ownership,我有一个在服务器上创建文件和目录的脚本(Joomla)。问题是,它在所有者99 99(无人)下创建它们,在没有服务器管理员的帮助下,我无法通过FTP删除或修改它们 我认为这就是php的move\u上传的文件功能 WHM或服务器管理员是否有解决此问题的方法?我可以修改ftp中的默认所有者吗?系统管理员设置PHP在无人下运行的用户。你对此无能为力 如果您知道FTP用户的ID,您可以尝试更改文件的所有者。但是,通常不允许您在PHP中执行此操作 根据服务器上的组情况,如果在上载文件后使用chmod更改文

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

我认为这就是php的
move\u上传的文件
功能


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

系统管理员设置PHP在无人下运行的用户。你对此无能为力

如果您知道FTP用户的ID,您可以尝试更改文件的所有者。但是,通常不允许您在PHP中执行此操作

根据服务器上的组情况,如果在上载文件后使用
chmod
更改文件的访问权限,FTP帐户可以访问文件:

先试试这个:

chmod($uploaded_file, 0660); // owner+group read+write
如果不起作用,请尝试以下方法:

chmod($uploaded_file, 0666); // global read+write
其中之一应该使FTP帐户可以使用该文件


非常不鼓励使用
0666
,因为服务器上的其他用户可以写入您的文件,但在某些配置中,这是唯一可以使用的方法。

发生的情况是,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
-rwxrwx---   1 nobody  nobody  12288 Oct 24 00:22 avatar.png
  • 第一个rw-是拥有该文件的用户(jweyrich)的权限(读/写)
  • 第二个rw-是拥有该文件的组(staff)的权限(读/写)
  • 末尾的--x是其他用户的权限(execute)
您的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=对于组(也是“无人”),授予读/写/执行权限
  • o-rxw=对于其他人,删除读/写/执行权限
之后,您的FTP用户(现在是“nobody”组的一部分)将拥有对上载文件的读/写访问权限,因此也可以删除这些文件。它看起来是这样的:

-rw-rw---x   1 jweyrich  staff  12288 Oct 24 00:22 avatar.png
-rwxrwx---   1 nobody  nobody  12288 Oct 24 00:22 avatar.png

这不是unix文件权限的理想介绍,但我希望这能有所帮助。

您能详细解释一下,我必须做什么吗?添加了一个关于文件权限的解释。您提到了解决此问题的最简单方法,但最正确(/secure)的方法是什么?@J-p:IMO,最正确和安全的方法,就是为每个网站创建一个唯一的用户帐户,然后为每个网站配置一个虚拟主机,使其在相应的用户()下运行解释器(在本例中为php)。FTP应该利用相同的用户,因此不需要更改上传文件的权限。另外,考虑两个守护进程()的色度。这个问题有最终的解决方案吗?@哈肯,那么它可能是不可能修复没有系统管理员的帮助。