テキストファイルを読み込んで自動表示する

浪花の居酒屋掲示板の最新投稿がホームページや他のページでもリアルタイムで表示されればいいな〜と思ってプログラムを組んでみた。
表示されてるのは現在麺飯浪花のトップページサイトマップ。右サイドに最新投稿が表示されるから見てね!
参考になる箇所があれば幸いですが、店主の備忘録です。

掲示板は配布されているプログラムで↓テキストファイルはこんな感じ。
100件ごとに自動的に新規のテキストファイルが連番で作成されます。

566<>0<>居酒屋掲示板に投稿<>姫<><>1386911557<>天ぷらついでに…筍も磯辺揚げで出てきたよん☆ミ<br>口に含んだときのふわっと磯の香りに甘味♪いい感じ!!<br>1つリクエスト!香川県独特の、もったいなから揚げちゃおうよ天ぷら!<br>筍を甘めに土佐煮にして、汁ごと天ぷらであげちゃう味付け天ぷら☆ミ<br>これが大好きで!!<br>またつくってもらっちゃお〜っと♪<br>よろしくねん!<>$1$abcd...<>abcd...<>abcd...<>0<><><>0<><><>

<>で区切って判定してます。(後半は端末情報などなので伏せました。)

ソース&解説メモ

<?php
$lineArray=array();//記事の配列定義
$n=0;//行数
$file_pre='..root/data/archive';//テキストファイルのあるとこの前半部分
$icnt=0;//file№カウント用
$filename='';//$filename(合体したファイル名が入る変数)を空にしておく
//1から順にファイルの有無をチェック↓
for (;;){
$icnt=$icnt+1;//まず$icntに1足す。戻ってきたときにも1足す。
if (file_exists($file_pre.$icnt.'.txt'))//『file_pre+$icnt』というファイル名が存在するとき
{
$filename=$file_pre.$icnt.'.txt';}//$filenameに代入して戻る
else{ break;}
}//ファイル名が存在しなければbreak

if (file_exists($filename)) {
} else {
echo $filename.'<br>';
exit;
}//判定したファイルが存在しなかった場合には$filenameの内容を表示(error回避)

$file=fopen($filename,'r');//$filenameを読み込み専用で開く
flock($file,LOCK_SH);//ロックする
while (!feof($file))//行末までぇ〜1行単位でぇ〜と指定
{
$line=fgets($file);//$lineに内容を代入
$line= explode("$1$","$line", 2);//$1$以下消す
$line = str_replace("<><>1", "<>\n", $line);//見栄え処理
$line = str_replace("<>", "‡", $line);//見栄え処理
$line = str_replace("‡0‡", " ", $line);//見栄え処理
$line = str_replace("‡", " ", $line);//見栄え処理
$line = str_replace("<br>", "\n", $line);//見栄え処理
$line = str_replace(">>", "⇒", $line);//見栄え処理
$line =preg_replace('/[0-9]{9}/', '', $line);//9桁の数字を消す
$n++;//カウントプラスワン〜
array_push($lineArray,$line[0]);//$lineArrayにpush
}
//読み込みループ終わり
//最新5記事表示(※後述)
for($a = 2; $a < 7; $a++) { if ($n>=$a){ echo nl2br(mb_strimwidth(htmlspecialchars($lineArray [$n - $a]).'<br /><hr>',0,300,'<a href="http://network.n-apc.com/bbs/bbs.php" rel="nofollow">…(bbs)</a><br /><hr>'));
}else{
break;}
}

flock($file,LOCK_UN);//ロックを解除
fclose($file); //ファイルを閉じる
//作・浪花くん|監修・姫の付人(師匠)
?>

とりあえず不具合なく動作してますが、次のファイルに移った時の挙動はまだ未確認。

最後の最新記事表示部分は分解してみます。
for($a = 2; $a < 7; $a++)
$aに初期値2を設定して+1のループを6まで繰り返す。
(2から始まるのはテキストエリア末行に改行が発生するための処置)
if ($n>=$a){..}else{break;}
行数$nより表示記事数$aが大きいか同じであった場合にはbreak。
(テキストにコメントが3件しかない場合には3件表示して終わり)
echo nl2br(mb_strimwidth(htmlspecialchars($lineArray [$n - $a]).'<br /><hr>',0,300,'<a href="http://network.n-apc.com/bbs/bbs.php" rel="nofollow">…(bbs)</a><br /><hr>'));
ごちゃごちゃしてますが、
$lineArray [$n - $a]を呼び出す。
内容を300字で切ってケツに掲示板へのリンクくっつける。
タグを無効化(mb_strimwidthの前に実行)
テキスト改行を<br />に変換。
表示する。
ループで最大行数$nから$a←2.3.4.5.6と順に引いていくので最新投稿順に表示される。

そんな感じで・・


関連記事:
タイピング練習無料サイト集 打鍵サイト集めてみた。タイピング記録サイトで日々精進!
アクセスとサイトのイメージ アメブロとか平均アクセスとかアナリティクスとか黒いブーツとか・・
ブログタイトルの重要性
文字コードで発狂寸前
文字エンコーディングを変換する
お取り寄せフォームつくった
緩めのスパム投稿対策プログラム
PHP・ブログ自動投稿プログラム
PHP・サンプルソースエロエロ

SEO・プログラムに関する記事一覧



最終更新日 H25/12/14
麺飯茶家浪花
香川県高松市林町1511-1