PHPのrmdirを使用して、ディレクトリを削除しようとしたら、Directory not emptyと表示されます。どうも、中身にファイルが存在しているために、起こるもののようです。

強制的にディレクトリを削除する方法はありませんか?

回答の条件
  • 1人2回まで
  • 登録:2006/08/25 15:35:26
  • 終了:2006/09/01 15:40:03

回答(6件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852006/08/25 15:46:55

ポイント19pt

http://jp.php.net/rmdir

PHPの標準の関数を使うだけでは無理みたいです。

このページの下の方に出ているソースをためしてみてください。

function removeDir($path)

{

$path.="*";

foreach(glob($path) as $file)

{

unlink($file);

}

}

}

?>

など。

あと試してないのですが、UNIX系ならsystem()関数を使ってそこでrm -rf パス名 を実行させていけると思います。

id:ito-yu No.2

ito-yu回答回数323ベストアンサー獲得回数142006/08/25 15:47:48

ポイント19pt

http://jp.php.net/rmdir

空じゃないと消せないのは仕様なので、自分で中のファイル/ディレクトリを消してやる必要があります。

上記ページのUser Contributed Notesに、使える関数がありますよ。

いらない行を消して転載します…

function remove_directory($dir) {

if ($handle = opendir("$dir")) {

while (false !== ($item = readdir($handle))) {

if ($item != "." && $item != "..") {

if (is_dir("$dir/$item")) {

remove_directory("$dir/$item");

} else {

unlink("$dir/$item");

}

}

}

closedir($handle);

rmdir($dir);

}

}

id:technolize No.3

technolize回答回数21ベストアンサー獲得回数32006/08/25 15:53:16

ポイント18pt

環境にもよりますが、UNIX (Windows) のコマンドを利用するのが直感的で簡単です (僕にとっては)。

<?php system("rm -rf {$dir}"); ?>


また、マニュアルの User Contributed Notes にもこの質問内容にあう解決方法がいくつか紹介されています。 PHP は公式のマニュアルを見れば大抵解決できますよ。

http://jp2.php.net/manual/ja/function.rmdir.php

id:fonya3 No.4

fonya3回答回数238ベストアンサー獲得回数102006/08/25 16:17:01

ポイント18pt

phpのマニュアルにサンプルがあります。

<?php

function remove_directory($dir) {
  if ($handle = opendir("$dir")) {
   while (false !== ($item = readdir($handle))) {
     if ($item != "." && $item != "..") {
       if (is_dir("$dir/$item")) {
         remove_directory("$dir/$item");
       } else {
         unlink("$dir/$item");
         echo " removing $dir/$item<br>\n";
       }
     }
   }
   closedir($handle);
   rmdir($dir);
   echo "removing $dir<br>\n";
  }
}

remove_directory("/path/to/dir");

?> 

http://jp.php.net/manual/ja/function.rmdir.php

id:tadashi0805 No.5

tadashi0805回答回数287ベストアンサー獲得回数292006/08/25 16:19:25

ポイント18pt

Linux等、Unix上で動いているのなら、rmdir()の代わりにsystem()を使って、

system("/bin/rm -rf 削除ディレクトリ名");

とすることで、ディレクトリ中にファイルが入っていても、中のファイルを全部消してからrmdir()したのと同じになります。

system()経由でrmコマンドを使いたくない場合は、ディレクトリ中のファイルをopendir()、readdir()を使って自前で調べ、一つ一つunlink()で消すことになります。

id:makocan

ここに皆様へのご返答を書きたいと存じます。

皆様ありがとうございました!

なるほど。どちらにせよ、特殊な処理が必要なのですね。

試して見たいと思います!

2006/08/26 04:28:20
id:m-nisi No.6

m-nisi回答回数159ベストアンサー獲得回数32006/08/25 23:51:18

ポイント18pt

rm -R hogehoge

で強制的に消せますよ。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません