我将目录修改为 777,与目录内容相同。不过,我收到“权限被拒绝”错误。如果 apache 不是组/所有者,无论文件权限如何,PHP 是否会抛出此错误?这是失败的调用:
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
我将目录修改为 777,与目录内容相同。不过,我收到“权限被拒绝”错误。如果 apache 不是组/所有者,无论文件权限如何,PHP 是否会抛出此错误?这是失败的调用:
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
您正在编辑更高级别的目录,因此 PHP 用户需要对该目录具有写入权限。
那可能是因为 apache 不是父目录的所有者。重命名(或移动)文件基本上与创建新文件相同。
澄清一下,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');
可能有助于这些情况的另一件事是尝试实际降低权限。我见过 apache 拒绝应用程序权限做某事的情况,因为它的权限设置得太高。我的猜测是,这是为了鼓励良好的安全实践。
尝试运行以下脚本:
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
看看会返回什么。
您必须递归地更改文件夹和其中包含的文件的权限。您需要以 root 用户身份从 ssh 执行此操作,然后运行以下命令:
chown -R www-data:www-data /directory/path/to/apply/chown
然后您可以毫无问题地执行 chown 语句。
我在研究,测试了几个小时后发现了这种方式。
请记住,文件夹或 root 所有者文件不能被其他用户操作(删除、重命名、移动、更改属性),而 root 可以在任何用户之上执行此操作。
最好的祝福