【原因】: PHP の整数型は符号付きであり、多くの IP アドレスが負の整数になるためです。
【解決策】: 公式マニュアルには、「 sprintf() の "%u" フォーマッタを使用する必要がある」と記載されています。 printf() は、署名されていない IP アドレスの文字列表現を取得します
、つまり、printf( '%u', ip2long( 'IP address' ) );
または、最初にバイナリに変換してから変換します10 進数に変換すると、 bindec( decbin( ip2long( 'IP アドレス' ) ) );
【テスト】
$strIp = '182.118.0.0';
echo ip2long($strIp); //このときの出力は -1233780736 です
echo '
';
echo binding( decbin( ip2long( $strIp ) ) ); // 出力は 3061186560 ですMySQL 関数の出力としては一貫しています~
【注意】:
number bindec ( string $binary_string ) // 2進数を10進数に変換します
string decbin ( int $number ); // 10進数を2進数に変換します