PHPでディレクトリとファイルを一括削除する

  • PHP
  • 現在地

前書き

rmdir() では、「PHPでのディレクトリの作成と削除」のページに記述した通り、ディレクトリ内にファイルやサブディレクトリが入っている限り削除することができません。

しかし、中のファイルを一つ一つ unlink() で削除するのも面倒なので、指定したディレクトリを削除する際に、サブディレクトリとファイルをすべて削除する関数を作っておくことにしました。

まあ本当は、mkdir() でパーミッションをミスって作成したディレクトリが、FTPから削除もアクセスもできなくなってしまったので作成した関数なんですが。

一括削除用の関数のコード

なお、rmdir() や unlink() で削除したファイル等は、ローカルで行っても「ごみ箱」に行かないので、テストする際は必要のないディレクトリを作成して、そのパスを指定して行ってください。

大事なディレクトリやファイルを削除してしまっても、責任は持てませんので。

  • <?php
    • // 関数
    • function remove_dir($path){
      • $list = scandir($path); $length = count($list);
      • for($i=0; $i<$length; $i++){
        • if($list[$i] != '.' && $list[$i] != '..'){
          • if(is_dir($path.'/'.$list[$i])){
            • remove_dir($path.'/'.$list[$i]);
          • }else{
            • unlink($path.'/'.$list[$i]);
          • }
        • }
      • }
      • rmdir($path);
    • }
    • // 関数の実行
    • remove_dir('./word');
  • ?>

関数 remove_dir() で行っていることは、ディレクトリツリーを作成した時とほぼ同じで、配列への格納と返り値の部分をファイルとディレクトリの削除に変更しただけです。

ディレクトリのパスを引数 $path として渡すことによって、指定されたディレクトリがファイルごと一括削除されることになるので、上記の例では「word」というディレクトリと、その中のファイルが削除されることになります。

余談ですが、ディレクトリツリーの際に作成した関数と併せてクラス化する場合は、再帰処理を行う関数部分だけ変更してください。

スポンサードリンク

inserted by FC2 system