PHPで中身やサブフォルダごとディレクトリを削除したい場合、組み込み関数の rmdir では出来ない。
何故かというと、
ディレクトリを削除できる組み込み関数のrmdirは、指定したディレクトリが空でなくては削除できないため。
非常に使いづらい関数です。
Windowsのエクスプローラのように、中身やサブフォルダがあっても問答無用に削除するための関数を作ったので
メモ代わりに置いておきます。
再帰関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function delete_dir( $path ) { // ディレクトリ指定でスラッシュがあれば除去 $path = rtrim( $path, "/" ); // 指定されたディレクトリの中身一覧取得 $list = glob( $path . "/*" ); foreach ( $list as $key => $value ) { // ディレクトリ(フォルダ)なら再帰呼出し if ( is_dir( $value ) ) { delete_dir( $value ); } // ファイルなら削除 else { unlink( $value ); } } // 指定されたディレクトリの中身が空ならディレクトリ削除して終了 $list = glob( $path . "/*" ); if ( count( $list ) == 0 ) { rmdir( $path ); return; } } $path = "delete_dir_path"; delete_dir( $path ); |
説明・使い方など
- まずはユーザー定義関数を定義します (行番号:1~26)
- 今回は関数名を「delete_dir」、渡される値(引数)を「$path」とします (行番号:1)
- コメント通りですが、$pathにスラッシュがあれば rtrim で除去します (行番号:4)
- glob関数で$pathの中身をリスト化します (行番号:7)
- foreach関数でリスト化した内容をループ処理していきます (行番号:9)
- is_dirで対象がディレクトリかどうかチェックします (行番号:11)
- 対象がディレクトリだった場合、この関数(delete_dir)を再帰呼出しします (行番号:12)
- 対象がファイルだった(ディレクトリではない)場合、unlink関数で削除します (行番号:15)
- 再度glob関数で$pathの中身を取得します (行番号:20)
- $pathの中身が空であれば、rmdir関数でディレクトリを削除して処理を終了させます (行番号:22~23)
- ユーザー関数の定義はこれで完了です
- 実際に関数 delete_dir を使用します
- 削除したいディレクトリを絶対パスで指定します (行番号:28)
- delete_dirに上記の絶対パスは渡して実行します (行番号:29)
投稿者プロフィール

-
PHPによるWebアプリ開発・コーディング(HTML・CSS)、音楽制作をやってる人。
主にPHPとコーディング(HTML・CSS)・音楽制作関連についての記事をメインで書いています。
最新の投稿
- 2016.09.27PHP【PHP】 指定ディレクトリ(フォルダ)をサブディレクトリを含めた中身ごと削除する自作関数
- 2016.09.27PHP【PHP】 便利な関数 filter_varで各種バリデーション
コメントを残す