ホームページ >バックエンド開発 >PHPチュートリアル >json_decode 整数オーバーフロー ソリューション_PHP チュートリアル
これは、MySQL の int 型が超えるとオーバーフローするのと似ており、bigint を使用するだけで済みます。その場合、PHP の int データ範囲の問題により、この種の問題も発生する可能性があります。
json の処理中にエラーが発生しました。デコード後に次のような大きな int 値のデータが破損しました。
コードをコピー | |
$配列 = 配列(
"id1" => 2147483647,
["id1"]=>int(2147483647) |
コードをコピー | |
["id1"]=>int(2147483647) ["id2"]=>int(-2147483646) } |
一般に、大きな数値を割り当てると、PHP は値の範囲を自動的に決定し、次のように型を自動的に変換します。
コードをコピー | |
$large_number = 2147483648; var_dump($large_number); 百万ドル = 1000000; $large_number = 50000 * 百万ドル; var_dump ($large_number); ただし、この検出は json_decode メソッドでは実行されません。これは PHP (古いバージョン) のバグです。5.3 以降のバージョンでは、この問題は存在しません。 |
コードをコピー
$配列 = 配列( | "id1" => 2147483647, | "id2" => 2147483648
$json = preg_replace('/("idd":)(d{9,})/i', '${1}"${2}"', $json); $out = json_decode($json, true); var_dump($out); もちろん、これを置き換える方法はニーズによって異なり、より詳細なテストが必要です。 |