-
この記事に検索で訪れる方が多いので、ディレクトリの作成/削除に関すPHPスクリプト及びPerlスクリプトを下のリンク先記事にまとめてみました!
「ディレクトリの作成/削除まとめ…PHPのmkdir/rmdir及びソケット通信でPerlへの変数受け渡し」
上記記事よりスクリプトのダウンロードもできます!
最近ずっとプログラム組んでて肩が凝る。。。
CMSずっと作ってたんだけどかなり高機能で使いやすくなった。
ディレクトリの作成/削除の一括かで結構手間取った。
PHPではmkdirっていうディレクトリ作成関数と、rmdirっていうディレクトリ削除関数がある。
perlと同じ使い方で、ディレクトリ内にファイルが存在するとfalseが帰ってくる。
だから中身を調べてファイルを削除してからディレクトリの削除を行う。
中にディレクトリが入ってたらもう一度中身を調べてファイル削除する。
ただレンタルサーバーによってはセーフモードでmkdirなんかは使えない。
PEARライブラリのsystem関数を使えばディレクトリ内になんか入っててもお構い無しに削除できるけど組み込むのも面倒。
シェルスクリプトで削除ってのも考えた。
で結局ここは規制のないperlへ変数渡して削除に落ち着いた。
で、削除する際の作った関数が下
-
//ディレクトリの配列チェック関数
function delete_dir_check($dir) {
$line = array();
//削除するディレクトリ$dirが配列(複数)かどうか
if(is_array($dir)) {
//配列なら一つづつ取り出す
foreach($dir as $dirname) {
$line[] = delete_dir($dirname);
}
} else {
$line[] = delete_dir($dir);
}
return $line;
}
//ディレクトリの中身のチェックとファイルの削除関数
function delete_dir($dirname) {
//ディレクトリの存在を調べる
if(is_dir($dirname)) {
//ディレクトリのOPEN
$dir = opendir($dirname);
//中身をひとつづつ$fileに取り出す
while($file = readdir($dir)) {
if($file != "." && $file != "..") {
//取り出した中身がファイルなのかディレクトリなのか調べる
if(filetype($dirname."/".$file) == "file") {
unlink($dirname."/".$file);
//ディレクトリならこの関数へ再走査
} elseif(filetype($dirname."/".$file) == "dir") {
delete_dir($dirname."/".$file);
}
}
}
closedir($dir);//ディレクトリを閉じる
//ディレクトリ削除用perlスクリプトへ変数を渡す準備
$script = "cgi/dirdelete.cgi";
$parm = array("dirname" => $dirname);
return http_post($script, $parm);
}
}
function http_post($script, $parm) {
〜〜ソケット通信用関数中略〜〜
}
今回は画像関連スクリプトの構築で、
PC用/PC用サムネイル/携帯用/携帯用サムネイル
って感じで一つのアルバムに対して4つのディレクトリが生成される。
画像も4倍の枚数が生成される。
アルバムを一つ削除した時にこれを全て削除するには・・・・
結局組み込みが楽なオリジナル関数になった。
もっと楽な方法あれば教えて!