• ベストアンサー

push命令って…

掲示板で、投稿数が多くなりすぎないように1ページに表示される数を制限して(例えば30件だけ)それ以上の件数になったら隅のほうにでも「1/2/3/次のページ/」などと表示して前のログを見れるようにしたいと思いそのようなのを作っているんですが何度やってもうまくいきません…。よろしければヒントなどをいただきたいと思います。 と、本題が遅れましたが…。 $cutnum=$cnt - $max; #切り取る数を指定 $i=0; foreach $line (@all){ push (@old,$line); #→例えばanswer.datのログを読み上の行から読み取り。 $i++; if($i eq $cutnum){last;} #→@allから$cutnum個のデータを読み取ったら抜ける } open (Old,">bbs1.dat"); print Old @old; close (Old); として、表示される最大数からあふれたのをひとつずつ過去ログとして保存するようにしたんですが、bbs1.dat には 投稿数を増やしていくと 5,2002年2月17日,Ryo,メアド  4,2002年2月17日,Ryo,メアド   3.2002年2月17日,Ryo,メアド    2,2002年2月17日,Ryo,メアド     1,2002年2月17日,Ryo,メアド とどんどんどんどんずれていってしまいます…。どうにかならないものでしょうか? 質問がわかりづらいかもしれないですがどうかよろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • ieyasu
  • ベストアンサー率50% (2/4)
回答No.2

いろんな方法が考えられますが、 一番感覚的に分かりやすい方法を・・・ $max = 50; (例えば、最大50件とすると) ここで、ファイルから読みとり、、、@linesに入れて、 foreach $no(0 .. $#lines){ if ($no >= $max){ push(@olds,$lines[$no])} else { push(@now,$lines[$no])} } とすれば、最大件数までは、@nowに格納→BBS表示に使い、 それ以上の部分があれば、@oldsに格納→olds.datへ追加書き込み→これからの 読みとり&過去ログ表示は定番のやり方で。 とすればいけると思います。 そのほか、書き込みは一件ずつって事を考慮すれば、書き込み段階で popして出た分ずつ過去ログファイルに追加書き込み。。。とも出来るかと思います。 細かい処理にはふれないでおきます。 あくまで参考程度に。

その他の回答 (1)

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

$lineの中がどのようになっているのかわからないので回答が難しいのですが、一旦ブラウザに配列の中身を吐き出してデバッグしてみてはいかがでしょう? それから、ついでのおせっかいなのですが、 せっかく$iを使ってか数をカウントされているので push (@old,$line); ↓ $old[$i] = $line; とされてはどうでしょう? それから if($i eq $cutnum){last;} は if($i > $cutnum) {last;}の方が安全ですよね。

関連するQ&A

  • 掲示板の設置について

    CGI初心者です。 ダウンロードした掲示板のcgiスクリプトを、自分のPCで設置テストをしています。(Apacheを使って) [htdocs]に[bbs]フォルダを作って、そのまま入れたときはちゃんと表示されました。次に「cgiはcgi-bin下でのみ動く」のテストをしてみようと、下記のように設置してみました。 [htdocs] | +-index.html | +-[cgi-bin]-bbs.cgi | +-[bbs]-[gazou]、jcode.pl、log.dat、skin.html (↑[bbs]フォルダに、[gazou]フォルダと3つのファイルを入れたという意味です) bbs.cgiにパスを設定する箇所があり、「このスクリプトの場所」は、./bbs.cgiで(初期値のまま)、[bbs]フォルダに入っているファイルは ../bbs/~ とし、http://localhost/cgi-bin/bbs.cgi で呼び出すと「ページが見つかりません」と出てしまいます。上記設置の他に、jcode.plとlog.datも[bbs]フォルダに移動してみましたが(パスも ./~ に変更しました)、「ページが見つかりません」になってしまいます。 きちんと表示させるにはどうしたらいいのでしょうか?教えて下さい、よろしくお願いします。

    • 締切済み
    • CGI
  • 掲示板で、ページの移動のリンクを付けたい

    今まで登録数が少なかったので1ページで全て表示しておりましたが、今回10件ごとにページを分けたいですが、いろいろ調べたり結構悩んでおります。例えば記事が31件あれば、最初のページは下のプログラムなら[1][2]と表示されますが、それにリンクの付かない[0]を最初に加えたいのと、例えば[2]を押したら、それを受け取ったプログラムは[0][1][2]([2]はリンクのつかない)を表示するようにしたいのです。要はよくある掲示板プログラムの一部ですが、私にはとても難しいです。 どなたかご教授よろしくお願いします。 $log = "./custom.dat";//■■■記事データ $lines = file($log); $maxline = count($lines);//■■■最大登録記事数(行数) $maxpage = 10;//■■■1ページ表示件数 $page = 1;//■■■現在のページ数 $pagenum = (($maxline - 1)/$maxpage);//■■■全ページ数を算出 $count = (int)$pagenum; for($i=0; $i<$count; $i++) { if($i == $page/$maxpage){ echo"[<b>$i</b>]"; }else{ $pageplus = $i + 1; echo"[<A HREF=?mode=mokuji&page=$pageplus&maxpage=$maxpage>$pageplus</A>]"; } } echo"$foot"; }

    • 締切済み
    • PHP
  • 最終更新日自動取得のようなCGIは難しいでしょうか

    お世話になります。 掲示板のログを、CGIにアクセスしただけで表示させたいと思っています。 掲示板CGIの中に下記の記述を加えているため、掲示板の中で表示させたい箇所に$allnumberと記述する事で、投稿記事の総数を表示できるようになっています。 -------------------- #総投記事数を表示 open(FH, "$room/log.cgi") or die; my $line = <FH>; my( $allnumber ) = $line =~ /^(?d*)/; close(FH); -------------------- マルチ掲示板CGIを使用しているので、$roomには各掲示板のIDが入力されます。 各掲示板の投稿数を表示する、単独のCGIスクリプトは難しいでしょうか。 最終更新日を自動的に取得して、表示するCGIのイメージです。 これらのCGI(仮に「lastup.cgi」とします)は、http://hogehoge.jp/lastup.cgi?./bbs/log.cgiと最終更新日を取得したいファイルを指定して、htmlファイルの表示させたい箇所に記述すると、指定したファイルの最終更新日が表示できるようになっているCGIがあります。 (※「./bbs/log.cgi」は、lastup.cgiから見た対象ファイルまでのパスです) (※「log.cgi」は、掲示板のログが保存されているファイルとします) このように、「http://hogehoge.com/~.cgi?./(掲示板ID)/log.cgi」と記述するだけで、htmlの好きな箇所に指定した掲示板の記事数を表示させるようなCGIはできないでしょうか。 私はこれまでにCGIをいくつか設置した経験や、改造した経験はありますが、いつもネットで検索して分かる範囲で簡単な改造しかできません。 お手数ではありますが、できる限り詳しく教えて頂けると嬉しく思います。 お力添えを頂けると助かります。 何卒、よろしく御願い致します。

  • ホスト名を表示するには

    たぶんこの行と思うのですが、dat内容を表示するにはどのように修正すればよいのでしょうか #スレッドの投稿ログを開く open(FH,"../$_[0]/dat/$sure_id.dat"); dat内容は以下のとおりです。(ホスト名を取得するまでは、投稿内容でdatは終わってました) 投稿名</b> ★<b><><>04/3/6 22:42 ID:***<>投稿内容<>ホスト名<>

  • goo(gaiax系)のLogとBBSのデザイン変更の仕方

    現在、gooでHPを開設しています。HP作成支援のサイトさまで趣味の頁の新規投稿を消す方法を知り(<NOEMBED>使用)別使用しています。でも、LogやBBSは背景のみの変更しか出来ないと諦めていましたが、最近、Logの名前が一人一人、囲まれていたり、BBSも通常は書き流しのような感じなのに一投稿ごとにテーブルで囲まれていて見易かったりします。是非、変更の仕方を教えてください。宜しくお願い致します。

  • OekakiBBSの設定について

    私はOekakiBBSさんの方で、掲示板をお借りしているのですが、 ページ数を表す所、↓ [1] [2] [3] [4] [5] [6] [7] [8] [9] [次の5件] ↑このようになっている所が、いつも9ページまでしか表示されず10ページが作れていません。 日記としてかなりの数をかいているので、投稿数が足りてないからページ数がないんじゃないの?という事はないです。 どこか設定で直せるのでしょうか? そして過去ログは三ページ分しか残されず、もっと昔のものは残せないようになっているのでしょうか? ご助言お願いいたします。

  • 掲示板を作るにあたり、ロックをすべき箇所は?

    ログファイルに書き込むためにファイルをopenする前に、ロック処理をする、というのはわかるのですが、ファイルを読み込むのみの場合(書き込まない場合)はopenする前にロックをする必要はありますか? フリーで配布されているスクリプトを見ていると、(掲示板の記事を表示する際に、ログファイルを参照するとき)ロックしていない場合がほとんどのように見えるのですがこれはなぜですか? 読み込む最中にときに誰かが書き込んでしまった場合、これでは読み込んだ側は誤ったものを読み込んでしまいませんか? ログファイルが壊れなければいい、と解釈してしまっていいでしょうか? それとできれば題名に書いたことを教えてくださるとうれしいです。 あと今作成中の掲示板のログファイルとして、 書き込まれた記事の最新番号、掲示板のカウンタ、最後に訪れたIP、を保存する count.dat(たとえばファイル内容は"43<>245<>218.xxx.yy.zz") と、記事のログを保存する bbs.logを用意しています。 つまり、新しく記事を書き込むときは、count.dat と bbs.logを両方openし、書き込むという作業をします。 これは効率は悪い方法でしょうか?

    • ベストアンサー
    • Perl
  • ページング処理(リンク非表示)

    こんにちわ。BBSの投稿をMySQL文で「次のページ」や「前のページ」に5件の投稿があれば、クリックした場合、投稿5件を表示するということはできたのですが、その投稿がない場合でも「次のページ」、 「前のページ」というリンクが表示されてしまします。 これを投稿がない場合は非表示にするなどの方法をお教え願えないでしょうか。

    • ベストアンサー
    • PHP
  • phpでのログファイル要素の取り出しについて

    お世話になります。 phpで以下の事をする場合についてなのですが、 log.dat(ログファイル) (log.datの内容) 643,1232,abceee,やま, 543,896,ddc.jp,かわ, 343,2435,rrsc,国, 214,1130,edbv.com,鳥, ※ログの順番はソートによって変わるようになっています 上記ログファイルの指定した部分だけを取り出して表示させたい場合、 例えば以下のようにforeachなどのループで毎回、 照合させて取り出すしか方法はないでしょうか。 hoge.php ============================ $id = $_GET['id']; $lines = file("log.dat"); foreach ($lines as $line) { $data=split("," ,$line); if'($data[2] == $id) { print "$data[1]"; break;} } ===================================== これを、たとえばですが、 以下のような記述で任意の箇所に何箇所か表示させる事ができるようにしたいのですが <?require("./hoge.php?id=rrsc");?> そのたびにlog.datをループさせてifで照合させて・・・ とやりますとログファイルもそこそこ大きくなってきますと 何回もループさせる事からサーバー負荷の点が気になってしまいまして このような場合、他に効率の良い方法などございましたら ご教授いただけないでしょうか。 (データベース等の使用は出来ず、あくまでログファイルを使って行わなければなりません) お手数をおかけしますがもしご存知の方がいらっしゃいましたら ご教授いただけますと幸いです。 (PHP Version 4.3.9 で稼動することが前提となります)

    • ベストアンサー
    • PHP
  • phpのpagerについて

    参考サイト http://enjoyjob.blog116.fc2.com/blog-entry-291.html にてpagerを作っているのですが、うまくできません。 DBに接続して、DBないのレコード数を表示させたいのですが、DBを読みこんでからがわかりません。 サンプルコードは以下です。 $bbs_query = mysql_query("SELECT COUNT(*) FROM `bbs` limit 15"); //全アイテム数 $totalItem = $bbs_query; //1ページあたりの上限 $parOnePage = 15; ・ ・ ・ 以下参考サイトの記述をし、表示するページにも http://enjoyjob.blog116.fc2.com/blog-entry-292.htmlにあるものを記入しました。 結果は PREVIOUS 1 NEXT とでるだけでリンクもできずページ数も増えません。 bbsテーブルにはレコード数は30程あります。 お分かりの方がいらっしゃいましたらご教授いただければと思います。 宜しくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう