【发布时间】:2014-05-12 04:26:40
【问题描述】:
我在 PHP 中编写了一个自定义删除函数。函数调用是递归使用的,但是在调用函数的时候,我得到一个错误输出:
// custom delete directory function
function deleteDirectory($dir) {
if (!file_exists($dir)) return true;
if (!is_dir($dir) || is_link($dir)) return unlink($dir);
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
// THIS IS LINE 32 LIKE MENTIONED IN THE ERROR
if (!$this->deleteDirectory($dir . "/" . $item)) {
// THIS IS LINE 33 LIKE MENTIONED IN THE ERROR
chmod($dir . "/" . $item, 0777);
if (!$this->deleteDirectory($dir . "/" . $item)) return false;
};
}
// THIS IS LINE 37 LIKE MENTIONED IN THE ERROR
return rmdir($dir);
}
function cleanup() {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->workFolder), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $name => $fileObject) {
if (is_file($name)) {
unlink($name);
} else if (is_dir($name)) {
system("/bin/chmod -R 0777 $name");
$this->deleteDirectory($name);
}
}
$this->deleteDirectory($this->workFolder);
}
我尝试了使用“$this->deleteDirectory()”的方法 但现在我收到一个完全不同的错误:
Warning: rmdir(/tmp/533aab0362830/.) [function.rmdir]: Invalid argument in /usr/www/users/kontug/api.medifaktor.de/webservice/passkit/class/Pass.php on line 37
Warning: rmdir(/tmp/533aab0362830/../.ICE-unix) [function.rmdir]: Operation not permitted in /usr/www/users/kontug/api.medifaktor.de/webservice/passkit/class/Pass.php on line 37
Warning: chmod() [function.chmod]: Operation not permitted in /usr/www/users/kontug/api.medifaktor.de/webservice/passkit/class/Pass.php on line 33
Warning: rmdir(/tmp/533aab0362830/../.ICE-unix) [function.rmdir]: Operation not permitted in /usr/www/users/kontug/api.medifaktor.de/webservice/passkit/class/Pass.php on line 37
【问题讨论】:
-
你在哪里调用函数?
-
/webservice/passkit/class/Pass.php的第 32 行是什么? -
函数是类的一部分:缺少
$this->或静态引用。 -
你应该逐步调试(
var_udmp($dir)) -
我尝试了 var_dump,但没有任何结果。想过“不允许操作”,但之前我把chmod设置为0777。