CleverCode最近遇到一個PHP專案整形轉換問題,mysql有一個字段id是bigint的,裡面有長整型,如id = 5147486396。但是php程式碼由於歷史原因卻部署在多台機器中,其中A機器32位元系統中,B機器64系統中。現在的問題是64系統中頁面存取正常。 32位元系統中存取出錯了。原因是php整形溢出。
# getconf LONG_BIT
<?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); ?>
(int)5147486396的结果是852519100,intval(5147486396)的结果是852519100,filter_var(5147486396, FILTER_VALIDATE_INT)结果是false。
<?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); ?>
(int)5147486396的结果是5147486396,intval(5147486396)的结果是5147486396,filter_var(5147486396, FILTER_VALIDATE_INT)结果是5147486396。
整數。 Integer 值的字長可以用常數 PHP_INT_SIZE來表示,自 PHP 4.4.0 和 PHP 5.0.5後,最大值可以用常數 PHP_INT_MAX 來表示
#
以上是關於php 32位元系統中長整型的強制轉換溢出的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!