PHP長整型在32位系統中強制轉化溢位
阿新 • • 發佈:2019-02-15
CleverCode最近遇到一個PHP專案整形轉化問題,mysql有一個欄位id是bigint的,裡面有長整型,如id = 5147486396。但是php程式碼由於歷史原因卻部署在多臺機器中,其中A機器32位系統中,B機器64系統中。現在的問題是64系統中頁面訪問正常。32位系統中訪問出錯了。原因是php整形溢位。
1 A機器演示
1.1 獲取A機器系統位數
# getconf LONG_BIT
1.2 整形轉化程式碼
<?php $id = 5147486396; echo '$id:'.$id."\r\n"; $value = (int)$id; echo '(int)$id:'.$value."\r\n"; $value = intval($id); echo 'intval($id):'.$value."\r\n"; $value = filter_var($id, FILTER_VALIDATE_INT); echo 'filter_var($id, FILTER_VALIDATE_INT):'."\r\n"; var_dump($value); ?>
1.3 執行結果
(int)5147486396的結果是852519100,intval(5147486396)的結果是852519100,filter_var(5147486396, FILTER_VALIDATE_INT)結果是false。2 B機器演示
2.1 獲取B機器系統位數
# getconf LONG_BIT2.2 整形轉化程式碼
<?php $id = 5147486396; echo '$id:'.$id."\r\n"; $value = (int)$id; echo '(int)$id:'.$value."\r\n"; $value = intval($id); echo 'intval($id):'.$value."\r\n"; $value = filter_var($id, FILTER_VALIDATE_INT); echo 'filter_var($id, FILTER_VALIDATE_INT):'."\r\n"; var_dump($value); ?>