ログファイルのデータから特定して表示させる方法とは?

このQ&Aのポイント
  • ログファイルのデーターから特定のコメントを表示させるには、PHPプログラムを利用します。
  • 特定のコメントを表示させるためには、ログファイルにコメントを保存し、それを読み出して表示する必要があります。
  • ログファイルへのコメントの保存には「file_put_contents」関数を使用し、ログファイルの読み出しには「file」関数を使用します。
回答を見る
  • ベストアンサー

ログファイルのデーターから特定して表示させる

例えば、掲示板とかブログ日記などの各記事に対して付けたコメントを ログファイルに保存し、そのログファイルの中から、その時付けた記事に 対してコメントを、その記事の所に表示させるにはどうしたらよいでしょうか? 出来れば具体的に、ソース説明で… 「ここの部分がこうで…この部分をこう記入…この関数の意味はこうです」 「インデックスの付け方はこうです。…こうするとインデックスが付けれます」 …と言った様に、実際に仕組み説明をソースで詳しくして頂けると助かります。 ※ データーベースは利用せず。 PHPプログラムだけで行いたい。 ※ 次の様な感じで追加モード「a」で単に書込みしてます。 <?php $fp = fopen("log.txt","a"); fputs($fp,$body); fclose($fp); ?> ※ 次の様な感じで file() で読み出しはできます。 <?php $data = file("log.txt"); for($i=0; $i<sizeof($data); $i++){ print "${data[$i]}<br>\n"; } ?> ただ、この呼び出し方法だと、例えば、log.txt に次ぎの様にデーターが保存(収納)されていた場合… 名前:テスト君1,コメント:あああ 名前:テスト君2,コメント:いいい 名前:テスト君3,コメント:ううう 名前:テスト君3,コメント:えええ 名前:テスト君3,コメント:おおお ……呼び出した時に、「名前:テスト君1,コメント:あああ」から順に呼び出され表示します。 ですので例えば… Aの場所で書いた記事に対して付けたコメントが、「名前:テスト君3,コメント:ううう」だとします。 Bの場所で書いた記事に対して付けたコメントが、「名前:テスト君2,コメント:いいい」だとします。 それを… Aの場所の所に、「名前:テスト君3,コメント:ううう」 Bの場所の所に、「名前:テスト君2,コメント:いいい」 …と言う様に、各記事に対して付けたコメントを、各記事で付けた場所に表示させたいのです。 その方法、やり方、仕組み、コツなどが分かりません。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • ulmo
  • ベストアンサー率43% (197/454)
回答No.1

このままではムリです。log.txtのコメントデータに、 「どの記事に対するコメントなのか」というデータが入っていません。 どこに表示させるかの判断基準がないのです。 なので log.txt を [記事ID],テスト君1,あああ とでもし、 <?php $here = 1 // 記事のID $data = file("log.txt"); for ($i = 0; $i < sizeof($data); $i++) { list($id, $name, $comment) = split(",", $data[$i]); if ($here == $id) { // データ中のIDと一致したら表示 echo "$name, $comment<br />\n"; } } ?> とすればいいでしょう。

orz_zin_l
質問者

お礼

有り難う御座います。 なるごど、記事にIDを付けてif 定義でそのIDが一致したならば表示させるですね! ヒントを下さって助かりました。 回答がおくれましたが、今になってやっと、各記事に対して付けたコメントを、各記事で付けた場所に表示させる事が出来ました。 また、色々この場でPHPに関して質問すると想いますので、見かけた時は、また、宜しくお願いします。 本当に今回、有り難う御座いました。

関連するQ&A

  • 【PHP】 記事の削除について(ログの一部を削除)

    log.txt ファイル の中身が下の様になっていた場合、削除したい記事番号を選び削除キーを押したら 選んだ記事番号の記事を削除するにはどうしたらよいでしょうか? ◆ log.txtファイルの中身 1 あああ君 おはよう ・ 3 かかか君 良い天気ですね ・ ・ 6 そそそ君 明日は晴れるでしょ ※ 記事番号($no) 名前($name) 内容($body)と配列がなっています。(全角の空白で区切ってます) ◆ 削除したい記事番号を選ぶ所のファイル名は 「file01.php」 としています。   「file01.php」では次ぎの様に削除キーを設定しています。 <table><tr><td> <form name="form" action="file02.php" method="POST"> <input type="text" name="delkey" size="8"> <input name="Submits" type="submit" value="削除"></form> </td></tr></table> ◆ 「file01.php」からのデーターの受け取りファイル名は 「file02.php」としています。   「file02.php」では次ぎの様にしてデーターを受け取る様にしています。 <?php $delkey = $_REQUEST["delkey"]; $data = file("log.txt"); for($i=0; $i<sizeof($data); $i++){ list($no,$name,$body) = explode( " " , $data[$i]); if($no == $delkey){ //・・・記事削除処理 } } ・ ・ ・ ?> ◆ 書込みは次ぎの様にしています。 $fp = fopen("log.txt","w"); $ndata = implode( " " , array($no,$name,$body."\n") ); fputs($fp,$ndata); fclose($fp); ここまではやってみましたが、ここから、どのような仕組みで選んだ記事番号の記事を削除したらよいのか分らないので教えて下さい? また、記事削除の処理をした場合、ログファイルを元のと書きかえるいはどうしたらよいのでしょうか教えて下さい? 例えば、選んだ削除番号が「3」だった場合など・・・記事削除処理のところはどうしたらよいのでしょうか? if の所では、記事番号($no)が選んだ削除したい記事番号($delkey)と等しいなら、・・・記事削除処理 と言う様にしています。 記事削除処理のところは、記事削除の仕組み仕方が分らないので空白となっています。 以上、出来れば詳しく教えて頂けると助かります。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 【PHP】 リンクに関した質問です。

    ブログを作成しいて、【最新コメント者】と言う所には、各日記の記事に対してコメントを 付けた方の名前が最新順に記される様にしています。 例えば… 【最新コメント者】 おはよう君 こんばんわ君 ・ ・ ・ おやすみ君 …と言う様に、それで今回の質問とは、その【最新コメント者】の所の名前をクリックしたら その名前の方が付けたコメントの記事にリンクする様にするにはどうしたらよいでしょうか? よろしくお願い致します。教えて下さいませ。 ◆ 【最新コメント者】の表示させるPHPソースの所では次ぎの様にしてあります。 <?php //log.txt は、コメントのログファイルです。 //$name には、コメントを付けた方の名前です。 //$bo には、コメントを付けた所の日記記事の番号(インデックス)です。 $log = file("log.txt"); for($i=0; $i<sizeof($log); $i++){ list($bo,$name) = explode( "," , $log[$i]); print "<a href=\"#$bo\">".$name."</a><br>\n"; } ?> ◆ 各日記の記事の最初のソースの所では次ぎの様にしてあります。 <?php //$no には、日記の記事の番号(インデックス)が代入されるようにしてあります。 print "<a name=\"$no\"></a>"; ?> この仕組みだと、最初に表示されているページ内に、コメントを付けた日記の記事番号があれば 付けたコメントの日記記事にリンクされるのですが、そのページに無い日記の記事番号の場合 コメントを付けたページの所のリンクされません。 ◆ ちなみに、ページリンクに関したソースは次のような感じにしてあります。 <?php if ($page > 1){$tugi .= "<a href = '$PHP_SELF?page=".($page - 1)."&total=$total&page_num=$page_num'>"."<b>次の記事</b></a>"; }print"$tugi"; if ($total > 1 and $page < $page_num){$mae .= "<a href = '$PHP_SELF?page=".($page + 1)."&total=$total&page_num=$page_num'>"."<b>前の記事</b></a>"; }print"$mae"; ?>

    • 締切済み
    • PHP
  • 掲示板で確認画面からデータを送るには

    過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。 掲示板で確認画面から掲示板へ書込みのデータを送りたいのですが、なかなかうまくいきません。 以下が掲示板のソースと確認画面のソースです。 「掲示板のページ」 <?php if ($_POST["write"] == "書込") { $log = $title . "\t" . $namae . "\t" . $body . "\n"; $fp = fopen("../php/test1.txt","a"); fwrite($fp,$log); fclose($fp); } $data = file("../php/test1.txt"); for($i=sizeof($data)-1;$i>=0;$i--){ list($title, $namae, $body) = explode("\t", $data[$i]); print <<<eof タイトル:{$title}<br><br> 名前:{$namae}<br><br> 記事NO.${i}:{$body}<br> <hr> eof; } ?> 「確認のページ」 <form name="form" action="./form.php" method="POST"> <input type="hidden" VALUE="$title,$namae,$body" > <input name="write" type="submit" value="書込"> </form> おわかりの方いましたらご教授お願いします。

    • 締切済み
    • PHP
  • 【PHP】 リンクに関した質問です。

    ブログを作成しいて、【最新コメント者】と言う所には、各日記の記事に対してコメントを 付けた方の名前が最新順に記される様にしています。 例えば… 【最新コメント者】 おはよう君 こんばんわ君 ・ ・ ・ おやすみ君 …と言う様に、それで今回の質問とは、その【最新コメント者】の所の名前をクリックしたら その名前の方が付けたコメントの記事にリンクする様にするにはどうしたらよいでしょうか? よろしくお願い致します。教えて下さいませ。 ◆ 【最新コメント者】の表示させるPHPソースの所では次ぎの様にしてあります。 <?php //log.txt は、コメントのログファイルです。 //$name には、コメントを付けた方の名前です。 //$bo には、コメントを付けた所の日記記事の番号(インデックス)です。 $log = file("log.txt"); for($i=0; $i<sizeof($log); $i++){ list($bo,$name) = explode( "," , $log[$i]); print "<a href=\"#$bo\">".$name."</a><br>\n"; } ?> ◆ 各日記の記事の最初のソースの所では次ぎの様にしてあります。 <?php //$no には、日記の記事の番号(インデックス)が代入されるようにしてあります。 print "<a name=\"$no\"></a>"; ?> この仕組みだと、最初に表示されているページ内に、コメントを付けた日記の記事番号があれば 付けたコメントの日記記事にリンクされるのですが、そのページに無い日記の記事番号の場合 コメントを付けたページの所のリンクされません。 ◆ ちなみに、ページリンクに関したソースは次のような感じにしてあります。 <?php //ページは $page の変数を使ってページを出力していますので、個別ページはありません。 if ($page > 1){$tugi .= "<a href = '$PHP_SELF?page=".($page - 1)."&total=$total&page_num=$page_num'>"."<b>次の記事</b></a>"; }print"$tugi"; if ($total > 1 and $page < $page_num){$mae .= "<a href = '$PHP_SELF?page=".($page + 1)."&total=$total&page_num=$page_num'>"."<b>前の記事</b></a>"; }print"$mae"; ?>

    • 締切済み
    • PHP
  • 掲示板の表示について

    掲示板を作っています。 書込みなどの表示がうまくいかず困っています。 試行錯誤していますが、うまくいきません。 下記のように表示したいのですが、 タイトル.ああ               名前.いい 記事NO.うう 下記のように表示されてしまうのです。 タイトル.ああ いい うう 名前.ああ いい うう 記事NO.ああ いい うう 問題のソースは以下の通りです。 <?php $data = file("../php/test1.txt"); list($title, $namae, $body) = explode("\t", $data); for($i=sizeof($data)-1;$i>=0;$i--){ print "タイトル.${data[$i]}<br>\n名前.${data[$i]}<br>\n記事NO.${data[$i]}<br>\n<hr>"; } ?> どなたかおわかりの方いましたらお願い致します。

    • ベストアンサー
    • PHP
  • phpの掲示板で新しい順に表示したい

    phpで掲示板を作っています。 新しい順に表示したいのですが、やり方がわかりません。 古い順に表示するやり方はわかるのですが、どうやったらよいでしょうか。 古い順のソースです <?php $data = file("../php/test1.txt"); for($i=0; $i<sizeof($data); $i++){ print "記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> どうかわかる方おりましたらご教授お願いします。

    • ベストアンサー
    • PHP
  • 変数からテキストファイルを保存

    サイトのソースを自動で取得するプログラムを考えいます。 その際にどこのサイトから取得したソースなのかをファイル名で整理したいと考えていますが、変数から自動的にテキストファイルを作ることができません。 どなたかお力をお貸し頂ければ幸いです。 それでは宜しくお願いいたします。 cate.txt======= shopping auction sports ============= <?PHP $Data = file("cate.txt"); for($c=0; $c<sizeof($Data); $c++){ //ここがうまく動いてくれません。。。 $filename == "{$Data[$c]}"."."."txt"; for($i=0; $i<1; $i++){ $url = "http://{$Data[$c]}.yahoo.co.jp/page={$i}"; $lines = file($url); $fp = fopen("data.txt","a"); foreach($lines as $newdata){ fwrite($fp, $newdata); } fclose($fp); } } ?>

    • ベストアンサー
    • PHP
  • 書込みされた事を知らせる為のアイコン表示について

    私の理想のイメージは、abc.php ファイルの掲示板に書込み(新規・返信)されたら、zyx.php ファイルの方で その abc.php ファイルの掲示板で書込みされた事を知らせる為のマーク up.gif (アイコン)を、書き込まれた日から 24時間(1日)の間表示させたいのです。 ◆ log.txt ファイル(掲示板の書込みログ) 1,みかん君,2008/04/16 15:19:14 ・ 3,りんご君,2008/04/13 22:19:32 ・ ・ 6,ぶどう君,2008/04/11 08:19:48 ・ ・ 以下省略 【 log.txt ファイルの補助説明 】 ※ 「 , 」(カンマ)で区切りを付けてます。 ※ インデックス,名前,日付 と言う順に配列がなっています。 ※ log.txt ファイルは、上から最新順に書き込まれるようにしてあります。 ※ インデックス($no) 名前($name) 内容($date)と配列がなっています。 ◆ abc.php ファイル(掲示板ページ) $fp = fopen("log.txt","a"); flock($fp, LOCK_EX); $data = implode( "," , array($no,$name,$date."\n") ); fputs($fp,$data); flock($fp, LOCK_UN); fclose($fp); 【 log.txt ファイルの補助説明 】 ※ 掲示板での書き込み処理です。 ◆ zyx.php ファイル(up.gif (アイコン)を表示させたいページ) <? $files = file("log.txt"); $logdata = $files[0]; list($no,$name,$date) = explode( "," , $logdata); if($no != ){ } ?> ここまではやってみましたが、ここから、どのようにしたらよいのか分らないので教えて下さい? また、if で、どのように条件を定義してよいかも分りません。宜しくお願い致します。

    • 締切済み
    • PHP
  • 【PHP】 書込みされた事を知らせる為のアイコン表示

    私の理想のイメージは、abc.php ファイルの掲示板に書込み(新規・返信)されたら、zyx.php ファイルの方で その abc.php ファイルの掲示板で書込みされた事を知らせる為のマーク up.gif (アイコン)を、書き込まれた日から 24時間(1日)の間表示させたいのです。 ◆ log.txt ファイル(掲示板の書込みログ) 1,みかん君,2008/04/16 15:19:14 ・ 3,りんご君,2008/04/13 22:19:32 ・ ・ 6,ぶどう君,2008/04/11 08:19:48 ・ ・ 以下省略 【 log.txt ファイルの補助説明 】 ※ 「 , 」(カンマ)で区切りを付けてます。 ※ インデックス,名前,日付 と言う順に配列がなっています。 ※ log.txt ファイルは、上から最新順に書き込まれるようにしてあります。 ※ インデックス($no) 名前($name) 内容($date)と配列がなっています。 ◆ abc.php ファイル(掲示板ページ) $fp = fopen("log.txt","a"); flock($fp, LOCK_EX); $data = implode( "," , array($no,$name,$date."\n") ); fputs($fp,$data); flock($fp, LOCK_UN); fclose($fp); 【 log.txt ファイルの補助説明 】 ※ 掲示板での書き込み処理です。 ◆ zyx.php ファイル(up.gif (アイコン)を表示させたいページ) <? $files = file("log.txt"); $logdata = $files[0]; list($no,$name,$date) = explode( "," , $logdata); if($no != ){ } ?> ここまではやってみましたが、ここから、どのようにしたらよいのか分らないので教えて下さい? また、if で、どのように条件を定義してよいかも分りません。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 掲示板ログの削除方法が分かりません

    XAMPP for Windows Version 1.5.4a   PHP: 5.1.6 掲示板に削除ナンバーと削除キーが合えば記事削除したいのですが行き詰ってます、教えてください。 01.phpが本体01.txtが保存ファイル 01.txtへの書き込みは、タブ区切り 8 名前 タイトル コメント 投稿時間 メールアドレス URL 削除キー $ireru=file("01.txt"); if($_POST["write"]){ $nosyori=explode("\t",$ireru[0]); $no=$nosyori[0]+1; ~タグ処理・改行対策・エラーチェック記述~ $data="$no\t$name\t$title\t$comment\t$time\t$mail\t$url\t$sakujyokey\n"; array_unshift($ireru, $data); } //削除処理// ここが問題・・・ //再構築// if($_POST['write'] || $_POST['delete']){ $fp=fopen("01.txt","w"); foreach($ireru as $dasu) fputs($fp,$dasu); fclose($fp);} 番号<input type="text" name="delno">削除キー<input type="password" name="sakujyokey2" value=""> <input type="submit" name="delete" value="記事削除"> ------------------------------------------ 下記を実行すると記事分だけ(9記事あれば削除できませんが9回出る)削除できませんが返ってきます。 if($_POST['delete']){ for($i=0; $i<count($ireru); $i++){ $nosyori=explode("\t",$ireru[$i]); if($nosyori[0] == $_POST['delno'] && $nosyori[7] == $_POST['sakujyokey2']){ array_splice($ireru,$i,1); echo"該当記事を削除しました"; }else{echo"削除できません";} } よろしくお願いします

    • 締切済み
    • PHP

専門家に質問してみよう