POTI-boardのログファイルを解析するphp

phpでお絵かき掲示板の最新画像を表示: STP^3のphpで呼び出した画像を元に、POTI-boardのログファイルを開いて、その画像の該当スレッドへのリンクと、タイトル、作者名を呼び出すphpの改良版です。

運営しているお絵かき掲示板では、レスでお絵かきを許可する設定にしていないので、ここまでする必要は無かったのですが、レスでお絵かきを使っていても、正確に該当スレッドへのリンクになるようにしておきたかったので工夫してみました。

プログラムの最初の行にコメントアウトしたファイル名がならんでいますが、本来はphpで呼び出すところを手動で入力してみて期待した動作になるかどうかテストをしたあとです。

設置しているPOTI-boardによって、この画像ファイルのURLや番号は変わりますので、このプログラムをそのまま設置しても動作しません。
使う場合は、入れ替えるべき箇所を入れ替える必要があります。
<?php
//画像のパスとファイル名
$imgno = 'poti/src/OB1529126099132.png';
//$imgno = 'poti/src/OB1532687964328.png';
//$imgno = 'poti/src/OB1515724311525.png';
//$imgno = 'poti/src/OB1516791076735.png';
//$imgno = 'poti/src/1525238233707.png';
//13桁のUNIX timeにする
$imgno = substr($imgno, -17,-4);
$fp = fopen("poti/img.cgi", "r"); //ログファイルの場所
while ($line = fgets($fp)) {
//ログファイルの書式から変数を取得
list($no,$now,$name,$email,$sub,$com,$url,
$host,$pwd,$ext,$w,$h,$time,$chk,$ptime,$fcolor) = explode(",", $line);
//KASIRAで指定した文字列を取り除く
//OBを取って13桁のUNIX timeにする
// $time = ltrim($time, 'OB');
//後ろから13桁のほうが確実なので書き直した
$time = substr($time, -13);
//取得したファイル名の
//13桁のUNIX time
//と$timeが同じならスレッドの番号は$no?
if ($time == $imgno){
$resno = $no;
break;
}
}
//レス画像かもしれないので、tree.logを見に行く
fclose($fp);
$fp = fopen("poti/tree.log", "r"); //ログファイルの場所
while ($line = fgets($fp)) {
//ログファイルの書式から変数を取得
$tree = explode(",", $line);//コンマ区切り形式のログの解析
$i=0;
$a=mb_substr_count("$line", ",")+1; //レスの数
//コンマ区切りなのでコンマの数+1。
while ($i < $a) {//0からレスの数までループ
if(rtrim($tree[$i], "\n")==$resno){
$resno=rtrim($tree[0], "\n");//スレッドの番号は$tree[0]
$count_end=true;//カウント終了
break;
}
if($count_end){break;}//レス先が見つかったのでbreak
echo "$i</br>";//確認用、実際には使わない。
$i++;
}
}

fclose($fp);
//掲示板のレス送信画面にリンク
echo '<a href="poti/potiboard.php?res='.$resno.'">掲示板</a></br>';
//タイトルを表示
echo "$sub</br>";
//投稿者名を表示
echo "$name</br>";
?>
なんども、無限ループになって青ざめましたが、なんとかここまで。レスの数だけループして番号を探すようにしたので、無駄にループする事がなく、またループの数が足りないという事もおそらく起きない…と思います。
$i=0;
$a=mb_substr_count("$line", ",")+1; //レスの数
//コンマ区切りなのでコンマの数+1。
while ($i < $a) {//0からレスの数までループ

何度も失敗しながらやっとここまでたどり付いた問題の箇所。
ループ文の中でループしているので、ループの条件を明確にしないと無限ループになりかねない、簡単そうでおそろしい箇所でした。

お絵かき掲示板のログ処理 php

テストプログラムなので、実行結果はあじけないこんな感じの画面です。
縦にならんでいる数字は、tree.logを読み込んだ回数です。ここが1とか2とか3ならサーバにそれほど負荷がかからないと思いますが、1000とか5000になると負荷がかかりすぎてプログラムが終了したり、高負荷になってサーバの制限がかかるかもしれません。
間近の画像を呼び出しているだけなら、それほど高い負荷にはならないはずですが、管理画面でリソースのチェックをして大丈夫かどうか確認したほうがいいのかもしれません。

プログラムを書ける人なら、こんなサンプルプログラムは必要ないのかもしれないし、書けない人には意味がわからないかもしれない。
さらにPOTI-boardのログを別のphpで使うプログラムなので、絵板を設置をするだけなら関係ない。
そんな、お絵かき掲示板をいくつも設置しているサイトのトップページに使う事を想定したプログラムですが、せっかく書いたので、サーバから消す前にブログにまとめておこうと思いました。

お絵かき掲示板はこちら。

この記事へのコメント

コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。