PHPログファイルを呼び出し、10件以上で 次のページへ>

とする、簡易ページャーを作りたいのです。
【以下スクリプト】
<?php
//===============一覧の表示===================
$lines = file("main.log"); // ファイルの内容を配列に格納
$num = count($lines);
for($i=0; $i<$num; $i++){
if(isset($lines[$i])){
$str = explode(",", $lines[$i]);

//===============一覧の表示(HTML) ===================
echo "<table width=\"240\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
echo "<tbody><tr>\n";
echo "<td width=\"30\" valign=\"top\"><img width=\"30\" height=\"40\" border=\"0\" alt=\"".$name."\" src=\"../img/gravure/".$number."_th.jpg\"/></td>\n";
echo "<td valign=\"top\"><font color=\"#333333\" size=\"1\">".$shop."</font><br/>\n";
echo "<font color=\"#333333\" size=\"1\">[".$area."/".$type."]</font><br/>\n";
echo "<a href=\"".$number.".php\"><font color=\"#ff3366\" size=\"1\">".$name.$age."</font></a><br/>\n";
echo "</td>\n</tr>\n</tbody>\n</table>\n";
echo "<font color=\"#999999\" size=\"1\">└".$title."</font>\n";
echo "<hr color=\"#cccccc\" size=\"1\"/>\n";
}
?>

explode(",", $lines[$i]); 変数の指定は省略しました。

これだと、当然ログファイル全件だ~~~~っと出てくるとのですが・・・。色々調べたのですが、うまくいかず・・・

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/04/20 17:26:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:GreenStar No.2

回答回数192ベストアンサー獲得回数46

ポイント33pt

簡単な例を作ってみました。

<?php
//===============環境設定===================
$page = 10;
//===============ファイルの読み込み===================
$lines = file("main.log"); // ファイルの内容を配列に格納
$num = count($lines);
$p = (isset($_GET['row']) ? min(max(0, $_GET['row'] - 1), floor($num / $page)) : 0);
//===============リンク作成===================
$link = ($p > 0 ? '<a href="' . $_SERVER['SCRIPT_NAME'] . '?row=' . $p . '">前の' . $page . '件</a>  ': '')  .
    ($p + 1) .
    ($num - $page * $p > 1 ? '  <a href="' . $_SERVER['SCRIPT_NAME'] . '?row=' . ($p + 2) . '">次の' . $page . '件</a> ': '');
echo $link;
//===============一覧の表示(TABLEヘッダ) ===================
echo '<table width="240" cellspacing="0" cellpadding="0" border="0"><tbody>';
//===============一覧の表示(TABLEボディ) ===================
for($i=0; $i < $page; $i++){
    if(isset($lines[$page * $p + $i])){
        $str = explode(",", $lines[$page * $p + $i]);
        echo '<tr><td>' . $str[0] . '</td><td>' . $str[1] . "</td></tr>\n";
    }
}
//===============一覧の表示(TABLEフッタ) ===================
echo '</tbody></table>';
echo $link;
?>

上記で利用する main.log の中身は以下のようにとりあえず2列にしていますので、上記スクリプトでは$strは[0]と[1]の二つになっています。列の数だけ$str[2]、$str[3]・・・と適宜増やしてください。

1,a1
2,a2
3,a3
・・・同様に続く

今回は特に参考にしているサイトも無いのでURLは無しです。

http://q.hatena.ne.jp/answer

id:goodbabies

ありがとうございます!参考になりました!

2010/04/20 17:24:13

その他の回答2件)

id:shellcat No.1

回答回数6ベストアンサー獲得回数0

ポイント42pt

http://d.hatena.ne.jp/shellcat/

URLはダミーです。


//===============一覧の表示===================
$page = $_GET['page'] || 0;

$lines = file("main.log"); // ファイルの内容を配列に格納
$num = count($lines);

for ($i = 10 * $page; $i < 10 * ($page + 1); $i++){
if ($i >= $num) break;

if(isset($lines[$i])){
$str = explode(",", $lines[$i]);

//===============一覧の表示(HTML) ===================
echo "<table width=\"240\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
echo "<tbody><tr>\n";
echo "<td width=\"30\" valign=\"top\"><img width=\"30\" height=\"40\" border=\"0\" alt=\"".$name."\" src=\"../img/gravure/".$number."_th.jpg\"/></td>\n";
echo "<td valign=\"top\"><font color=\"#333333\" size=\"1\">".$shop."</font><br/>\n";
echo "<font color=\"#333333\" size=\"1\">[".$area."/".$type."]</font><br/>\n";
echo "<a href=\"".$number.".php\"><font color=\"#ff3366\" size=\"1\">".$name.$age."</font></a><br/>\n";
echo "</td>\n</tr>\n</tbody>\n</table>\n";
echo "<font color=\"#999999\" size=\"1\">└".$title."</font>\n";
echo "<hr color=\"#cccccc\" size=\"1\"/>\n";

if ($page > 0) echo "<a href=\"./?page=" . ($page - 1) . "\">前へ</a>";
if ($page < int(($num - 1) / 10)) echo "<a href=\"./?page=" . ($page + 1) . "\">次へ</a>";
}

こんな感じですか

id:GreenStar No.2

回答回数192ベストアンサー獲得回数46ここでベストアンサー

ポイント33pt

簡単な例を作ってみました。

<?php
//===============環境設定===================
$page = 10;
//===============ファイルの読み込み===================
$lines = file("main.log"); // ファイルの内容を配列に格納
$num = count($lines);
$p = (isset($_GET['row']) ? min(max(0, $_GET['row'] - 1), floor($num / $page)) : 0);
//===============リンク作成===================
$link = ($p > 0 ? '<a href="' . $_SERVER['SCRIPT_NAME'] . '?row=' . $p . '">前の' . $page . '件</a>  ': '')  .
    ($p + 1) .
    ($num - $page * $p > 1 ? '  <a href="' . $_SERVER['SCRIPT_NAME'] . '?row=' . ($p + 2) . '">次の' . $page . '件</a> ': '');
echo $link;
//===============一覧の表示(TABLEヘッダ) ===================
echo '<table width="240" cellspacing="0" cellpadding="0" border="0"><tbody>';
//===============一覧の表示(TABLEボディ) ===================
for($i=0; $i < $page; $i++){
    if(isset($lines[$page * $p + $i])){
        $str = explode(",", $lines[$page * $p + $i]);
        echo '<tr><td>' . $str[0] . '</td><td>' . $str[1] . "</td></tr>\n";
    }
}
//===============一覧の表示(TABLEフッタ) ===================
echo '</tbody></table>';
echo $link;
?>

上記で利用する main.log の中身は以下のようにとりあえず2列にしていますので、上記スクリプトでは$strは[0]と[1]の二つになっています。列の数だけ$str[2]、$str[3]・・・と適宜増やしてください。

1,a1
2,a2
3,a3
・・・同様に続く

今回は特に参考にしているサイトも無いのでURLは無しです。

http://q.hatena.ne.jp/answer

id:goodbabies

ありがとうございます!参考になりました!

2010/04/20 17:24:13
id:Bombastus No.3

回答回数409ベストアンサー獲得回数52

ポイント5pt

PEAR :: Pager を利用した方が早いと思いますよ。ご検討ください。

  • id:hatake-kakasi
    hatake-kakasi 2010/04/21 12:19:19
    その回答では次ページがないのに「次ページ」と出てしまうよ。
  • id:GreenStar
    訂正
    $num - $page * $p > 1
    $num - $page * $p > $page

    継続質問と回答
    http://q.hatena.ne.jp/1271815740

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません