Top > diary > 2006-10-25

popularプラグインの動作がおかしい? Edit

今日の人気、昨日の人気を設置してみて気づいたのですが、

  1. 昨日の人気は今日の人気で表示したページを優先してのページを元に表示するページを決定するようです。
  2. 昨日の人気で30ページの閲覧があっても今日の時点で3ページしか閲覧が無ければ「昨日の件○件」は「昨日の3件」と表示され3ページ分の閲覧件数情報のみ表示されます。
    つまり今日の閲覧が0件の時、昨日の人気は何も表示されないということです。
  3. 今日の2時頃、21頃のスクリーンショット
    2時21時
    06-10-25 2時.png06-10-25 21時.png
    21時の時点では昨日の上位ランキングページが全て閲覧されているので正常に表示されているように見えるが、変わるはずの無い昨日のランキングで2時と21時の内容が変わっている事から正しくない事がわかるかと思います。

分析 Edit

PukiWiki Plus! 質問箱/80のコメントより Edit

  • 環境によって動作が違うという事ですね。この事から私のサイトがPHP5.1.4が原因していると判断して、ちょっと調べてみました。
    • 2006/10/27 0:10 のpopular内変数の値
      • PHP5.1.4
        $yesterday = 2006/10/25
        $today = 2006/10/27
      • PHP4.3.11
        $yesterday = 2006/10/26
        $today = 2006/10/27
    • これはstrtotime関数が5.0.2 以降の PHP 5 では、"now" と他の関連する時刻は 誤って当日の真夜中から計算されます。 これは正しく現在時刻から計算する他のバージョンと異なります。にて計算しているからでは?と私は推測しました。taru 2006-10-27 (金) 00:14:24
    • ここだと、5.0.2 までのってなっていますね。-- upk? 2006-10-27 (金) 01:22:32
    • 「以降」と「まで」では全然違いますね (^^; まぁどちらにせよstrtotimeらへんがバージョンによって動作が変わるって事で理解しときますね^^;、一応修正案考えてみました。
        0
        1
      
      	$today = gmdate('Y/m/d', $localtime);
      -	$yesterday = gmdate('Y/m/d', strtotime('yesterday', $localtime));
      +	$yesterday =  date('Y/m/d', mktime(0, 0, 0, date('m'), date('d')-1, date('Y')));
      
      私のサイトはこれで様子を見てみますね。taru 2006-10-27 (金) 02:10:21

という事で今回の件は、上記内容で設定を変更して様子を見ています。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes