php - 递归删除目录

标签 php recursion

我用 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

最佳答案

如果函数属于一个类那么它应该这样调用

$this->deleteDirectory($dir . "/" . $item)

代替

deleteDirectory($dir . "/" . $item)

关于php - 递归删除目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785175/

相关文章:

c - 递归打印链表时出现段错误

java - 如何创建一个使用 Java 中的二叉搜索树获取前一个节点的方法?

java - If-Else 的 Else 语句有时不会被调用吗?

php - 没有紧凑结构的 MVC 应用程序的原因是什么?

php - symfony 2 sylius 包丢失(TranslationBundle)

php - 通过命令行运行的 PHP 脚本的查询字符串字符限制?

recursion - 延续传递风格使事情尾递归?

php - 在没有 ACID 数据库的情况下处理 session ?

PHP 5.4 Call-time pass-by-reference - 可以轻松修复吗?

node.js - NodeJS : Loop through nested JSON and remove elements based on a condition