【问题标题】:PHP function to remove a directory and all its sub content. [closed]删除目录及其所有子内容的 PHP 函数。 [关闭]
【发布时间】:2013-10-05 23:02:55
【问题描述】:
   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 文件调用到服务器上每个文件中包含的前置文件中太棒了......任何类似设置的建议都会很棒。

【问题讨论】:

    标签: php user-defined-functions prepend


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

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

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

      你可以做到

      var_dump($out);
      

      检查结果是否被删除。

      【讨论】:

        猜你喜欢
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 2011-08-19
        • 2010-10-23
        • 1970-01-01
        • 2011-03-21
        • 2016-01-01
        相关资源
        最近更新 更多