Contents
hide
rmdir() の問題点
PHP の rmdir()
関数でディレクトリを消去しようとする時、中にファイルやフォルダが入っていると消してくれない。まず、空にしてから適用する必要がある。
テストを書いていて、前回の処理の掃除をするだとかいった必要性がある時や、プラグインなどのアンインストール処理でこのような処理が必要な時がある。
カスタム関数
ということで、次のカスタム関数が便利。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function deleteFiles( $sPath ) { if ( ! file_exists( $sPath ) ) { return; } if ( is_file( $sPath ) ) { unlink( $sPath ); return; } // At this point, it is a directory. $_aItems = scandir( $sPath ); foreach( $_aItems as $_sItem ) { if ( $_sItem !== "." && $_sItem !== ".." ) { deleteFiles($sPath . "/" . $_sItem ); } } rmdir( $sPath ); } |
使い方は、パラメーターにパスを投げるだけ。ディレクトリだけでなく、ファイルも対応。
unlink()
の場合、渡されたパスのファイルが存在しない場合、エラーを吐くので、先にチェックしなければならず、ラインが増える。しかし、この関数は内部でそのチェックを行っているので、コードを多少クリーンに保つことができる。