PHP函数删除目录及其所有子内容。

时间:2013-10-05 23:02:55

标签: php user-defined-functions prepend

   function rrmdir($dir) { 
        if (is_dir($dir)) { 
         $objects = scandir($dir); 
         foreach ($objects as $object) { 
           if ($object != "." && $object != "..") { 
             if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 
           } 
         } 
         reset($objects); 
         rmdir($dir); 
        } 
    }

我有这个功能来删除一个目录及其所有内容(子目录和子文件)。

此功能效果很好,可以在一两秒内删除超过5k的文件。

但有没有人对优化此功能有任何建议?

另外......如果有人有任何“系统”或方法在一台服务器上安全地托管自定义php功能并在其他服务器上调用它们让我知道...这将是很棒的,因为我有大量的功能和我使用3台服务器,并希望将它们全部放在一个位置。我使用cPanel的全局前置功能轻松地在我所有的php文件中包含我的所有函数,并且效果非常好但是如果有一种方法可以简单地将远程托管的PHP文件调用到服务器上每个文件中包含的前置文件中是一流的...任何类似设置的建议都会很棒。

2 个答案:

答案 0 :(得分:1)

while循环应该比foreach更快,if语句的顺序也很重要。

function removeDirectory($path)
{
    $path = rtrim($path, '/').'/';
    $files = scandir($path);
    $i = count($files);

    while (--$i) {
        $file = $files[$i];
        $fullpath = $path.$file;

        is_file($fullpath) 
        ? @unlink($fullpath)
        : ($file != '.' and $file != '..' and removeDirectory($fullpath));
    }

    rmdir($path);

    return true;
}

答案 1 :(得分:0)

如果允许执行shell执行,则可以执行简单的linux函数

$out = shell_exec('rm -rf /path/to/directory');

你可以做到

var_dump($out);

检查结果是否已删除。