俺の適当なダイアリー

カテゴリー

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 |

2005-12-24 MagpieRSS

[] MagpieRSS不具合 11:27

先日サーバPHPを最新の5.1.1にアップデートしたところ、MagpieRSSの日付フォーマット整形関数である parse_w3cdtf が正常に動かなくなった。


秒数に「:」まで含まれてしまうため gmmktime でエラーとなる。

おそらく preg_match の仕様が変わったのではと思い、PHPの news.txt を確認したがそれらしいことは書いていなかった。

取り急ぎ付け焼刃的な修正を加えた。

rss_utils.inc

function parse_w3cdtf ( $date_str ) {
    # regex to match wc3dtf
    $pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/";
    
    if ( preg_match( $pat, $date_str, $match ) ) {
        list( $year, $month, $day, $hours, $minutes, $seconds) = 
            array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]);
        
        # calc epoch for current date assuming GMT
        // PHP5.1.1から挙動が変わったためとりあえず対策 2005年12月24日(土)
        // echo "seconds=".$seconds;  確認用
        // 以下 $seconds は下2桁のみ抽出
        $epoch = gmmktime($hours, $minutes, substr($seconds,-2,2), $month, $day, $year);

echo $seconds; すると :40 などと帰ってくるので、

substr で強制的に下2桁のみを抽出することにして仮対処完了。