CleverCode a récemment rencontré un problème de conversion plastique du projet PHP. mysql a un identifiant de champ qui est bigint et contient un entier long, tel que id = 5147486396. Cependant, le code php est déployé sur plusieurs machines pour des raisons historiques, parmi lesquelles la machine A est un système 32 bits et la machine B est un système 64 bits. Le problème est maintenant que l'accès aux pages est normal dans le système 64 bits. Erreur d'accès dans le système 32 bits. La raison est le débordement de mise en forme de 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。
# 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的结果是5147486396,intval(5147486396)的结果是5147486396,filter_var(5147486396, FILTER_VALIDATE_INT)结果是5147486396。
La longueur des mots entiers dépend de la plate-forme, bien que le maximum habituel soit d'environ deux milliards (signé 32 bits) . La valeur maximale sur les plateformes 64 bits est généralement d'environ 9E18. PHP ne prend pas en charge les entiers non signés. Entier La longueur en mot de la valeur peut être représentée par la constante PHP_INT_SIZE Depuis PHP 4.4.0 et PHP 5.0.5, la valeur maximale peut être représentée par la constante PHP_INT_MAX
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!