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はそのためにあったんだと感心する。