0
   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文件调用到服务器上每个文件中包含的前置文件中太棒了......任何类似设置的建议都会很棒。

4

2 回答 2

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;
}
于 2013-10-06T00:10:29.053 回答
0

如果您被允许执行 shell 执行,您可以执行简单的 linux 功能

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

你可以做

var_dump($out);

检查结果是否被删除。

于 2013-10-06T00:39:45.237 回答