PHP研究

10.ログファイルの扱い

掲示板などを作ろうとすれば、ログファイルを開いただけでは使えるデータではない。
データベースは別として(DBはわからないので今後の宿題)、
テキストベースでログファイルを管理する場合、
1行に1ログというのが通例だ。

そのファイルを読み込むには、

$list = file("log.log");

このとき$listにはログファイルの各行が
それぞれ配列の要素として、格納される。
改行コードが付いたままであることに注意。

そのまま各行を出力するだけなら

foreach ($list as $lines) { //配列$listを1要素(ここでは1ログ)分$linesに入れる。
print $lines . "<br>;
}

となる。
ただ通常は名前やURLなどいくつもの要素が含まれているため、
分解する必要がある。上のforeachを書き直すと、

foreach($list as $lines){
list($no,$name,$mes)=explode(",",$lines); //list関数でログを分解
print "$no $name >> $mes <br>\n";
}

というようになる。もちろんこれは全ログが出力されます。
最初の10行と限定すれば、

for($i = 0; $i < 10; $i++){
list($no,$name,$mes)=explode(",",$list[$i]);
print "$no $name >> $mes <br>\n";
}

となります。

分解して、すぐ配列に代入してしまうやり方もあり。

$lines = preg_split("(,)","$list[$i]");


保存には

fopen()

を使います。

↓例

$dat = "$no,$name,$mes\n";
$lines = file("log.log");
$fp = fopen("log.log","w");
fputs($fp,$dat);
for($i = 0; $i < 99; $i++)
fputs($fp, $lines[$i]);
fclose ($fp);

1行目でフォームから入力されたデータをフォーマット。
2行目で今までのデータを格納。
3行目で改めてファイルをオープン。
このときwというオプションがあるため、ファイルは空になります。注意。
4行目で最新のデータを書き込み。
5・6行目で今までのデータを改めて追記。
これはfor文の括弧のない書き方ですね。
7行目でファイルを閉じます。

今までのデータを配列に読み込み、
新しいデータを配列に追加する方法もあり。

$lines = file("log.log");
array_unshift ($lines,"$no,$name,$mes\n");