先月納品したサイトでバグ発生。更新した商品を新しい順に表示できない。このサイトは、別のシステムからXMLファイルで商品データをインポートしている。
原因は、XMLファイルに格納されている商品の更新日付が、マイクロ秒付きで格納されていることだった。つまり、こんな型式。
2009-11-04 18:08:50.382221
もらったXML構造の仕様書には、YYYY-MM-DD H:i:s形式で秒までしか格納しないと書かれているが、そこは大人の対応で、こちらが対応する。
使っているUNIX時間に変換する関数strtotimeは、PHP4ではマイクロ秒に対応していないのが原因だった。しっかりPHPのマニュアルにも書いてあった。マイクロ秒は結局は無視されるようだが。
というか、マイクロ秒が入ってくるなんて考えていなかった。マイクロ秒が入ってくればエラーにしておけばよかったかも。実は、テスト環境がPHP5で本番がPHP4というのも問題かもしれない。