Introduction détaillée au dépassement de conversion forcé d'entiers longs dans le système PHP 32 bits

黄舟
Libérer: 2023-03-14 09:40:02
original
2547 Les gens l'ont consulté

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.

1 Démonstration d'une machine

1.1 Récupérer les bits système d'une machine

# getconf LONG_BIT


1.2 Code de transformation plastique

<?php

$id = 5147486396;
echo &#39;$id:&#39;.$id."\r\n";

$value = (int)$id;
echo &#39;(int)$id:&#39;.$value."\r\n";

$value = intval($id);
echo &#39;intval($id):&#39;.$value."\r\n";

$value = filter_var($id, FILTER_VALIDATE_INT);
echo &#39;filter_var($id, FILTER_VALIDATE_INT):&#39;."\r\n";
var_dump($value);


?>
Copier après la connexion
Copier après la connexion

1.3 Résultats d'exécution

(int)5147486396的结果是852519100,intval(5147486396)的结果是852519100,filter_var(5147486396, FILTER_VALIDATE_INT)结果是false。
Copier après la connexion


Démonstration de la machine 2 B

2.1 Obtenir B Bits du système de machine

# getconf LONG_BIT


2.2 Code de conversion plastique

<?php

$id = 5147486396;
echo &#39;$id:&#39;.$id."\r\n";

$value = (int)$id;
echo &#39;(int)$id:&#39;.$value."\r\n";

$value = intval($id);
echo &#39;intval($id):&#39;.$value."\r\n";

$value = filter_var($id, FILTER_VALIDATE_INT);
echo &#39;filter_var($id, FILTER_VALIDATE_INT):&#39;."\r\n";
var_dump($value);


?>
Copier après la connexion
Copier après la connexion

2.3 Résultat de l'opération

(int)5147486396的结果是5147486396,intval(5147486396)的结果是5147486396,filter_var(5147486396, FILTER_VALIDATE_INT)结果是5147486396。
Copier après la connexion


3 Conclusion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!