それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpで'rm -rf'で再帰的に空じゃないフォルダを消す。

php で rm -rf をする方法を探してた

PHPの組み込み機能をすごく上手につかった方法を発見したのでメモ。

<?php
function rm_rf($dir){
  $entries = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::CHILD_FIRST
  );
  
  foreach ($entries as $entry) {
    $func = ($entry->isDir() ? 'rmdir' : 'unlink');
    $func($entry->getRealPath());
  }
  rmdir($dir);
}

これを使うと、再帰的な削除でドットファイル再帰的な関数呼び出しも発生しない。頭いいなぁ。と思う。

RecursiveDirectoryIteratorで、ドット除去したファイル一覧を取得して、 RecursiveIteratorIterator::CHILD_FIRSTで、引数に指定されたディレクトリを最後に回す。

そうすると、foreach だけですべて削除が完成する。よく考えてある。というか RecursiveIteratorIteratorはそのためにあったんだと感心する。

以前の資料

php rmdir() で空じゃないフォルダを消すには? - それマグで!