符号あり整数とか、符号なし整数とか。その手の問題から目を背けていたら、やっぱり自分に返ってきましたよ、というお話。
とあるページにユーザーのアクセスがあったら、IPアドレス・ユーザーエージェント・日付などをログテーブルに格納するプログラムを書いていたのだけど、IPアドレスの所がどうもおかしい。
PHPの「ip2long()」と「sprintf」を使ってドット付き10進数のIPアドレスを符号なし整数に変換していたのだけど、2147483647問題が多発。笑
コードを簡単に書くと、こんな感じ↓
$ip = sprintf("%u",ip2long($_SERVER["REMOTE_ADDR"]);
この段階での$ipは正常値なんだけど、DBに格納する段階で勝手に「2147483647」になってしまっていて、レコードが2147483647だらけ・・・という由々しき事態に陥ったのです。笑



