我将目录chmod到777,与目录内容相同。不过,我得到了“拒绝权限”错误。不管文件权限如何,如果apache不是组/所有者,PHP会抛出此错误吗?这里是一个的失败的呼叫:为什么我会在尝试重命名目录时在PHP中获得“权限被拒绝”?
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
我将目录chmod到777,与目录内容相同。不过,我得到了“拒绝权限”错误。不管文件权限如何,如果apache不是组/所有者,PHP会抛出此错误吗?这里是一个的失败的呼叫:为什么我会在尝试重命名目录时在PHP中获得“权限被拒绝”?
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
您正在编辑更高级别的目录,因此PHP用户需要具有对该目录的写入权限。
尝试运行以下脚本:
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
看到那个返回什么。
这可能是因为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拒绝应用程序权限来执行某些操作的场合,因为它的权限也设置为高。我的猜测是,这是为了鼓励良好的安全实践。
在安全模式下是正确的,但在所有其他情况下不需要所有权 - 具有适当权限的简单chmod就足够了。 – brezanac 2012-01-10 01:49:02