Home > Archives > 2011-01

2011-01

【PHP】ディレクトリを削除しようとしたらはまった

ファイルを書き出すスクリプトを作ってる際、 既に書き出し用のフォルダが存在していたらそのディレクトリを削除する っていう関数を作ろうと思ったらまんまとはまったのでメモ。

まずはここを参考にディレクトリ削除の関数を作ってみる。

PHP:ディレクトリを削除する|STUDIO WING .lib

  function delDir($path){
    if($handle = opendir($path)){
      while($item = readdir($handle)){
        if($item != '.' && $item != '..'){
          if(is_dir("$path/$item")){
            delDir("$path/$item"); //再帰
          }else{
            unlink("$path/$item");
            echo "...";
          }
        }
      }
      echo "<br/>";
    }
    closedir($handle);
    rmdir($path);
  }

とりあえずこれで特に問題なく動くかと思われたものの、 数字のみ(0~の連番)のディレクトリだけ何故か削除されない模様。 色々調べてるうちに下記のエントリに行き着いた。

ディレクトリ内のファイル一覧を取得する|Affirmative Way

正しくは以下のように取得してやる PHP: readdir – Manualより引用 警告 この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や “” といった値を返す可能性もあります。詳細については 論理値のセクションを参照してください。この関数の返り値を調べるには ===演算子 を使用してください。

ということなので下記のように書き換え。

  function delDir($path){
    if($handle = opendir($path)){
      while(false !== ($item = readdir($handle))){ //!== ってしないとディレクトリ名が"false"になることもある
        if($item != '.' && $item != '..'){
          if(is_dir("$path/$item")){
            delDir("$path/$item"); //再帰
          }else{
            unlink("$path/$item");
            echo "...";
          }
        }
      }
      echo "<br/>";
    }
    closedir($handle);
    rmdir($path);
  }

これで無事削除完了。 文字列 ”0” も “==” だと false なのよね。。

というわけで2011年初エントリ。

Home > Archives > 2011-01

Search
Feeds
Meta

Return to page top