« Movable TypeでSitemaps(サイトマッププロトコル)を作ってみよう | トップページ | PEAR::Mailを使ってメールを送信してみよう »

2007年03月19日

PEARを使ってディレクトリの中身を全削除する

先週の木・金曜日あたりからずっと貧血気味で調子が悪く、夜型の生活が影響しているのかと思っていたのですがそれだけではありませんでした。原因は野菜不足。。。
最近は自炊する時間もなく外食が多かったのですが、肉ばっかり食べてたもんだから体調を崩したようです^^;当たり前だけど野菜はちゃんと食べよう。
さて、そろそろ本題に移ります。
PHPには「rmdir」というディレクトリを削除する関数がありますが、「空ディレクトリ」のみしか削除できずディレクトリ内にファイルが存在した場合、削除することができません。
PHPの標準機能だけを使った場合、再帰処理を使って全てのファイルを「unlink」で削除した後に「rmdir」を実行する必要があります。
今回はPEAR::Systemを使ってディレクトリを完全削除する簡単な方法を紹介します。

今回の「PEAR::System」はPEARの標準機能です。
インストールについて知りたい方は、過去の記事をご参照ください。
レンタルサーバーでPEARを使う方法
WindowsでPEARを自動インストールしてみよう

では早速作ってみましょう。
以下の構成だと仮定します。

[home]
 └─[ sample]
 └─rm.php

rm.phpは削除用のPHPファイル、sampleディレクトリは削除するディレクトリです。

rm.phpに削除用のスクリプトを記述します。

require_once("System.php");
System::rm("-r sample");
これだけです^^;問題なく削除できた場合はTRUE、削除に失敗した場合はFALSEが返ってきます。
ディレクトリ内にファイルがあっても再帰処理で全部削除してくれます。

HTTPからrm.phpにアクセスすれば、sampleディレクトリ及びディレクトリ内の全てのファイルを削除してくれます。
当然ですが、権限のないファイル・ディレクトリは削除はできません。
もし、権限のないファイルと権限のあるファイルが混ざっていた場合、権限ありのみのファイルが削除されて戻り値はFALSEが返ってきます。
権限のないファイルを削除したい場合は、属性を「777」にすれば削除できます。

require_once("System.php");
if(System::rm("-r sample")) {
  echo "削除が成功しました";
} else {
  echo "削除に失敗しました";
}

ちなみに

System::rm("samle.txt");

と記述すると、指定のファイルを削除してくれます。

ローカル上でテストしてみたのですが、500MBの容量(ファイル数:約30,000)でも問題なく削除できました。処理には約10~15秒かかりましたが、、、
一時保存ディレクトリを作った場合、削除処理がうまくいかずに困ることがありましたが、これからは大丈夫そうです。

トラックバック

このエントリーのトラックバックURL:
http://www.s-memo.net/mt/mt-tb.cgi/38

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)