5

我将目录修改为 777,与目录内容相同。不过,我收到“权限被拒绝”错误。如果 apache 不是组/所有者,无论文件权限如何,PHP 是否会抛出此错误?这是失败的调用:

rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
4

6 回答 6

12

您正在编辑更高级别的目录,因此 PHP 用户需要对该目录具有写入权限。

于 2008-10-12T21:23:32.197 回答
2

那可能是因为 apache 不是父目录的所有者。重命名(或移动)文件基本上与创建新文件相同。

于 2008-10-12T21:24:38.437 回答
2

澄清一下,php只能重命名它拥有实际所有权的目录:

-rwxrwxrwx user   user   temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user   user   script.php

假设 script.php 正在尝试重命名这两个目录:

// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions    
rename('temp', 'temp.bak');

// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak'); 
于 2008-10-12T21:48:30.837 回答
1

可能有助于这些情况的另一件事是尝试实际降低权限。我见过 apache 拒绝应用程序权限做某事的情况,因为它的权限设置得太高。我的猜测是,这是为了鼓励良好的安全实践。

于 2008-10-12T22:03:23.833 回答
0

尝试运行以下脚本:

print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));

看看会返回什么。

于 2008-10-12T21:23:13.727 回答
0

您必须递归地更改文件夹和其中包含的文件的权限。您需要以 root 用户身份从 ssh 执行此操作,然后运行以下命令:

chown -R www-data:www-data /directory/path/to/apply/chown

然后您可以毫无问题地执行 chown 语句。

我在研究,测试了几个小时后发现了这种方式。

请记住,文件夹或 root 所有者文件不能被其他用户操作(删除、重命名、移动、更改属性),而 root 可以在任何用户之上执行此操作。

最好的祝福

于 2020-02-18T19:50:30.127 回答