opendirとreaddir、closedirを使ったディレクトリ内のファイル一覧 : ぺたっとPHPサンプルソースコード |
ひとつのフォルダにデータファイルを溜め込んで、一覧表示させたい事は良くあるので結構使う。
まず、ディレクトリを開く関数が
opendir
で、ファイル名を読み込む関数が
readdir
処理が終わったらお行儀良く
closedir
でフォルダを閉じる。
まとめると
|
実際にやってみたら . と .. まで入っててなんじゃこりゃ。
使うなら使ったらいいのだが、ログ一覧とかで出すとしたら必要ない。
単純に . と .. なので文字列として除外し、そうでなければ代入する。
if($filename != "." and $filename != "..")
でいいと思うので、while内の処理を上のifで囲む感じ。
ログ表示にしても例えば20120603.txtみたいに書かれると微妙にかっこ悪い。
せっかくなので拡張子は取ってしまう。
そこで使う関数が
str_replace
で、指定した文字列を消してくれる。
まとめると
|
str_replace("いらない文字" , "書き換えたい文字" , "ファイル名");
という感じで使うので、今回の場合は".txt"を""(何もなし)に書き換え、つまり消している。
whileで直接readdirしたうえstr_replaceしているがこういうやり方がいいのかは全く知らない。
その後 . と .. 以外であれば変数に格納している。
whileでファイルがあるだけやってくれるのだが、ここで$filecountという変数を持たせてついでに数を足し、数えている。
で、その数の配列にファイル名をいれている。
こうして数えた数は、一覧表示する時の行数などにも使える。
10件ずつとか100件ずつとかやりやすい。
蛇足だが、20120603を2012年6月3日みたいに書き換えたいのなら
substr(文字列 , ○バイト目の文字から , ○バイト目の文字まで);
という関数で指定の文字列から必要な文字を取り出すことができる。
上の例で言えば、printのところで
print (
とすればいい。
substr($replace_name[$filecount] , 0 , 4) . "年" .
substr($replace_name[$filecount] , 5 , 2) . "月" .
substr($replace_name[$filecount] , 7 , 2) . "日" .
"<br>"
);
ただ、06月とかなるのを6月としたい場合はちょっと面倒で、
単純に0を取ろうとすると10月が1月になってしまうし、日も同様。
年号は別に触らなくてもいいので、月と日だけ
if(substr($replace_name[$filecount] , 5 , 1) == "0"){
のようにすればいい。
print(substr($replace_name[$filecount] , 6 , 1));
}else[
print(substr($replace_name[$filecount] , 5 , 2));
}
これは月となる2桁のうち最初の1文字目が0であれば
6バイト目(月の2桁目)から1バイト取り出し、
そうでなければ
5バイト目から2バイト(2桁とも)取り出している。
同じように日は7バイト目が0であれば8バイト目を1文字、そうでなければ7バイト目から2文字取り出す。
まとめると
|
蛇足の割りに書き出したら長くなってしまった。
しかしここまでする必要があるかどうか。めんどいし。なんかもっといい方法ない?
当サイト「ぺたっとPHPサンプルソースコード」は、初めてPHPを触る初心者でもすぐにPHPプログラミングができる・分かるサイトです。
PHPのサンプル
0から始めるPHP
日記