今回はPHPでサーバー上の不要になったディレクトリを削除する方法をご紹介します。
WindowsやMacでの操作だったら選択して削除ボタンをポンと押せば一発ですが、PHPではディレクトリ内にファイルがあると削除出来なくてなかなか曲者です!
そんな場合でも削除できる方法も含めてやってみましょう。
PHPでサーバー上のディレクトリを削除する方法
ディレクトリの削除は、rmdir() を使います。
[aside type=”normal”]rmdir($ディレクトリ);[/aside]
$ディレクトリは、ディレクトリのパスです。
rmdir("dir");
のように書くと、このPHPファイルと同じディレクトリ内にある dir というディレクトリが削除されます。
しかし、ちょっと扱いが難しいのが、中にファイルが存在すると削除出来ないということです。
Warning: rmdir(dir): Directory not empty ・・・
削除するディレクトリの中にディレクトリがある場合も同様に削除できません。
ディレクトリを削除するためには、その中のファイルやディレクトリを全て削除する必要があります。
指定したディレクトリ内を一括削除するなら再起的なやり方
ということで、削除対象のディレクトリ内にあるディレクトリとファイルを全て削除するサンプルを作成してみました。
≫ PHPで指定したディレクトリ内のファイル名とディレクトリ名一覧取得
上の記事でサブディレクトリも含めてファイル名とディレクトリ名を一覧表示するサンプルを作りました。
それを使ってディレクトリ内のファイルとディレクトリを全て削除して元のディレクトリを削除する関数にしました。
function rmdirAll($dir) {
// 指定されたディレクトリ内の一覧を取得
$res = glob($dir.'/*');
// 一覧をループ
foreach ($res as $f) {
// is_file() を使ってファイルかどうかを判定
if (is_file($f)) {
// ファイルならそのまま出力
unlink($f);
} else {
// ディレクトリの場合(ファイルでない場合)は再度rmdirAll()を実行
rmdirAll($f);
}
}
// 中身を削除した後、本体削除
rmdir($dir);
}
// 最初にディレクトリを指定する
rmdirAll('img');
案外うまく動きましたが、コピーする際は自己責任でお願いします。
一発で強制的にディレクトリを削除する方法
上では再帰的?とかいうちょっとややこしい方法のサンプルコードをご紹介しました。
しかし、実はもっと簡単な方法があります。
だって、Windowsの場合フォルダと選択してデリートボタン押せば中身も含めて全て削除できるでしょ?
たいていのWEBサービスはOSがLinuxだと思いますが、Linuxにも当然そういう機能(コマンド)はあります。
そのコマンドをPHPから実行すればOKです。
その場合は以下のように書きます。
// 削除対象のディレクトリのパスを指定
$dir = "dir";
// ststem() を使ってLinuxコマンドを実行
system("rm -rf {$dir}");
rm は Linux のコマンドで削除をするときに使います。
-rf は、rmコマンドのオプションです。-rはディレクトリを削除するときに使います。-fはファイルを削除する際に確認されなくなります。ファイルが無かった場合に警告も出なくなります。
これだけで一発で削除できます。
まとめ
PHPでディレクトリを削除する場合は rmdir() を使う。
しかし、指定したディレクトリ内にファイルやディレクトリが存在する場合はエラーになります。
なのでディレクトリ内も綺麗に削除してから削除する必要があり、あまり使い勝手がいいとはいえません。
そんなときはOSの削除コマンドを実行して削除する方が簡単です。










コメント