[PHP-users 26837] Re: ディレクトリ削除処理

Yusuke Hata nowelium @ gmail.com
2005年 9月 11日 (日) 07:31:45 JST


ハタです。
簡単ですが、以下のようなスクリプトで消せました。

$files = glob( "hoge/*" );
foreach( $files as $file ){
    unlink($file);
}

rmdir( "hoge" );

ディレクトリには
hoge/
hoge/a1
hoge/a12
hoge/a123
がありましたが、ディレクトリごと消せています。

05/09/11 に kimura @ kmtec.co.jp<kimura @ kmtec.co.jp> さんは書きました:
> こんにちは、
> 自作で下記のようなディレクトリ削除プログラムを組んでいるのですが、
> ファイルなどは
> すべて削除されるのですが、ディレクトリは削除されません。
> 組み方が悪いらしく、ループから抜けることも出来ず、
> うまく動いてくれません。
> よろしくお願いします。
> 
> 環境
> OS:windows
> php4.1
> 
> 渡されてくる値
> $_POST['item1']; = C:/www/tetete/1/
> $_POST['item2']; = 1
> 
> 
> <?php
> $item1 = $_POST['item1'];
> $item2 = $_POST['item2'];
> $dir = $item1;
> $cnt = 1; //カウント初期値
> $copy_direct[] = array(); //コピー用配列
> 
> if($item2 == 1){
>   //ディレクトリを削除する
>   //削除するディレクトリにファイルが入っている場合、削除できないので先に削除
> する
> 
> //すべてのファイルを削除するまで抜けない
>  while($cnt != 0){
>   //ディレクトリファイル取得
>  $dh  = opendir($dir);
>  $direct[] = array();
>   //削除ディレクトリパス格納配列
>  $cnt = 1; //カウント
>  while (false !== ($filename = readdir($dh))) {
>      $files[] = $filename;
>   $cnt++;
>  }
>  closedir($dh);
>     if($cnt == $teny){
>   //ディレクトリ削除する
>   //コピーした$copy_direct配列の最大値に取得されている最下位ディレクトリ削除
>   $tep = count($copy_direct) - 1;
>   rmdir($copy_direct[$tep]);
> 
>   //最後のディレクトリを削除した場合、whileから抜ける
>   if($tep == 0){
>    $cnt = 0;
>   }
>  }
>  for($i=2; $i<$cnt; $i++){
>  //ファイル名に「.」があればファイル、なければディレクトリ名として判断
>    if(strpos($files[$i], '.') == 0 ){
>    // ディレクトリパス格納
>   $direct[] = $dir .'/'. $files[$i];
>   print($direct);
>    } else {
>   //ファイル削除
>   @unlink($dir .'/'. $files[$i]);
>    }
>     }
>      //次の検索するディレクトリパスを代入
>      $dir = $direct[0];
>      //初期化する前に、配列のコピーをとっておく、
>      $copy_direct = $direct;
>      $teny = count($copy_direct) - 1;
> 
>  }
> } else {
>   //ファイルを削除する
>   //「@」をつけることでエラーを出さなくする。
>    @unlink($item1);
> }
>   //ページ移動
> //  header("Location: bark-menu.php");
> ?>
> 

-- 
Yusuke Hata <nowel @ xole.net>
blog: http://blog.xole.net/


PHP-users メーリングリストの案内