CakePHPのfolder.phpでディレクトリ操作

Posted by joeartsea on 2009-03-30

PHPでディレクトリを作成する場合、一行若しくは存在しないファイルを作成すればコードを書かなくても実現できますが、ディレクトリ削除はディレクトリ内にファイルが存在する場合、以下のようにファイルを一旦すべて削除してからディレクトリを削除する流れになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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";
}
}
}
closedir($handle);
rmdir($dir);
echo "removing $dir";
}
}
remove_directory("/path/to/dir");

余談ですが、たまに「system(“rm -Rf /path/to/dir”);でいいじゃん」なんて言う人がいますが、こんな環境ド依存コードでいいじゃんと言える神経がちょっとわかりません。

CakePHP1.2でディレクトリ削除する場合は独自で関数を書く前にcake/libs/folder.phpにメソッドがないか見ておきましょう。何やら「delete」というそれらしき名前のメソッドがあります。試しに使ってみましょう。使い方はコントローラなどに以下のようなコードを書きます。

1
2
3
uses('Folder');
$folder = new Folder();
$folder->delete("/path/to/dir");

他にもreadとかtreeとか意味深なメソッドがありますね。またpwdやchmodなどUNIX系でお馴染のコマンドに見立てたメソッドもあります。恐らく想像通りの動きをすると思いますので要件があれば色々試してみると良いでしょう。