我有一个脚本(Joomla),它在服务器上创建文件和目录。问题是它在所有者99 99(无人)下创建它们,并且在没有服务器管理员的帮助下我无法通过FTP删除或修改它们。
我认为这是php的move_uploaded_file
函数。
WHM或服务器管理员是否有任何此问题的解决方案?我可以修改ftp中的默认所有者吗?
答案 0 :(得分:3)
HTTP服务器由名为“nobody”的用户运行,而您的FTP用户是另一个用户。上传发生时,HTTP服务器在其用户名下创建文件,而您的FTP用户无权写入(或删除)这些文件。
解决此问题的最简单方法(但不是非常安全)是将两个用户添加到同一个组中,并更改文件权限以允许同一组的用户对这些文件进行读/写。
您的管理员应该处理它,但您必须调用chmod()来更改上传文件的权限。
更好地解释:
linux / unix文件权限由用户(u),组(g)和其他(o)的权限组成。 这里我只介绍3种类型的文件权限,分别是read(r),write(w)和execute(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文件权限的理想介绍,但我希望这会有所帮助。
答案 1 :(得分: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
,因为服务器上的其他用户可能会写入您的文件,但在某些配置中,这是唯一的方法。