2013-10-05 5 views
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); 
     } 
    } 

У меня есть эта функция для удаления каталога и всего его содержимого (подкаталогов и вспомогательных файлов).Функция PHP для удаления каталога и всего его дополнительного содержимого.

Эта функция отлично работает и может удалять более 5 тыс. Файлов всего за секунду или две.

Но есть ли у кого-нибудь предложения по оптимизации этой функции?

Также ... если у кого-то есть какая-либо «система» или метод для надежного размещения пользовательских функций php на одном сервере и вызова их на других серверах, дайте мне знать ... это было бы потрясающе, поскольку у меня есть огромный набор функций и я работаю с 3 серверами и хотел бы, чтобы все они были в одном месте. Я использую глобальный preend cPanel, чтобы легко включать все мои функции во все мои php-файлы, и это работает очень хорошо, но если бы существовал способ просто вызвать удаленно размещенный PHP-файл в файл preend, который включен в каждый файл на сервере, который быть превосходным ... Любые предложения для подобной установки были бы потрясающими.

ответ

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; 
} 
0

, если вы имеете право сделать исполнение оболочки можно выполнить простую функцию Линукс

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

и вы можете сделать

var_dump($out); 

проверить результат, если он был удален или нет.