首先,让我们解决这些问题:
chmod
对0777的权限不会阻止错误。现在,这是我的问题。尝试删除目录时rmdir()
会抛出此错误:
rmdir(098f6bcd4621d373cade4e832627b4f6)[function.rmdir]:第124行路径\ to \ administrate.php中的权限被拒绝
098f6bcd4621d373cade4e832627b4f6 是目录的名称。
以下是该脚本的相关部分。
if(is_dir($userhash)) :
foreach (new DirectoryIterator($userhash) as $fileInfo) {
$fileName = $fileInfo->getFilename();
if($fileInfo->isDot()) continue;
if(!rename($userhash.'/'.$fileName , 'trashcan/'.$username.'/'.$fileName)) {
echo '<p class="error">Could not move '.$fileName.'</p>';
$err = 1;
}
}
else :
echo '<p class="error">Unable to delete files! error: 67</p>';
$err = 1;
endif;
//JUST TO BE SURE
chmod('./',0777);
chmod($userhash,0777);
// RMDIR ONCE THE DIR IS EMPTY.
if(rmdir($userhash))
echo '<p class="success">Deleted the user directory. The files are in the trash.</p>';
else {
echo '<p class="error">Could not remove the user directory. Error: 656</p>';
$err = 1;
}
我在同一目录中手动创建了目录'jake'
。我做了rmdir('jake');
并且效果很好。现在,我在同一目录中手动创建了一个目录'098f6bcd4621d373cade4e832627b4f6'
。我做了rmdir('098f6bcd4621d373cade4e832627b4f6');
并且错了!
这开始看起来像一些奇怪的rmdir()
错误,尽管看起来不太可能。以下是我创建的目录名称,然后尝试使用rmdir
;
098f6bcd4621d373cade4e832627b4f6 | didn't work (quintuple checked)
098f6bcd4621d373cade4e832627b4f7 | worked
098f6bcd4621d373cade4e832627b4f | worked
098f6bcd4621d373cade4e832627b4f66 | worked
答案 0 :(得分:2)
为了能够删除文件:
<强>更新强>
关于限制删除标记 - 来自man chmod
:
受限制的删除标记或粘贴位
限制删除标记或粘贴 bit是单个位,其位 解释取决于文件 类型。对于目录,它会阻止 不受欢迎的用户删除 或重命名目录中的文件 除非他们拥有该文件或 目录;这被称为 限制删除标志 目录,常见于 世界可写的目录,如/ tmp。 对于一些较旧的常规文件 系统,该位保存程序 交换设备上的文本图像所以它 运行时加载速度会更快;这个 被称为粘性位。
您可以通过在模式中向第一个八进制数字加1来设置它,例如:
chmod 1xxx dirname
更新2:
执行php的用户是否具有chmod父目录的权限?
换句话说,你确定第一个chmod调用返回true吗?
chmod('./',0777);