Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in den erzwungenen Konvertierungsüberlauf langer Ganzzahlen im 32-Bit-PHP-System

Detaillierte Einführung in den erzwungenen Konvertierungsüberlauf langer Ganzzahlen im 32-Bit-PHP-System

黄舟
黄舟Original
2017-07-17 15:35:162543Durchsuche

CleverCode ist kürzlich auf ein PHP-Projekt-Plastikkonvertierungsproblem gestoßen. mysql hat eine Feld-ID, die Bigint ist und eine lange Ganzzahl enthält, z. B. id = 5147486396. Allerdings wird der PHP-Code aus historischen Gründen auf mehreren Maschinen bereitgestellt, wobei Maschine A ein 32-Bit-System und Maschine B ein 64-Bit-System ist. Das Problem ist nun, dass der Seitenzugriff im 64-Bit-System normal ist. Zugriffsfehler im 32-Bit-System. Der Grund ist ein PHP-Shaping-Überlauf.

1 Eine Maschinendemonstration

1.1 Holen Sie sich die Systembits einer A-Maschine

# getconf LONG_BIT


1.2 Kunststofftransformationscode

<?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);


?>

1.3 Laufergebnisse

(int)5147486396的结果是852519100,intval(5147486396)的结果是852519100,filter_var(5147486396, FILTER_VALIDATE_INT)结果是false。


2 B Maschinendemonstration

2.1 Get B Maschinensystembits

# getconf LONG_BIT


2.2 Formkonvertierungscode

<?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);


?>

2.3 Operationsergebnis

(int)5147486396的结果是5147486396,intval(5147486396)的结果是5147486396,filter_var(5147486396, FILTER_VALIDATE_INT)结果是5147486396。


3 Fazit

Die Wortlänge von Ganzzahlen ist plattformabhängig, obwohl das übliche Maximum bei etwa zwei Milliarden liegt (32-Bit mit Vorzeichen) . Der Maximalwert auf 64-Bit-Plattformen liegt normalerweise bei etwa 9E18. PHP unterstützt keine vorzeichenlosen Ganzzahlen. Integer Die Wortlänge des Werts kann durch die Konstante PHP_INT_SIZE dargestellt werden. Seit PHP 4.4.0 und PHP 5.0.5 kann der Maximalwert durch die Konstante PHP_INT_MAX

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den erzwungenen Konvertierungsüberlauf langer Ganzzahlen im 32-Bit-PHP-System. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn