Problem Umwandlung in Integer

Nachdem etwas bei mir nicht funktioniert hat, bin ich auf die Suche gegangen und habe folgendes Phänomen gefunden.

Funktioniert:


$string = "34560";
var_dump($string);
$number = intval($string);
var_dump($number);

Ausgabe:


string(5) "34560"
int(34560)

Funktioniert nicht:


$string = "6232364702572216320";
var_dump($string);
$number = intval($string);
var_dump($number);

Ausgabe:


string(19) "6232364702572216320"
int(2147483647)

:confused:
Benutzt wird IP-Symcon 5 Beta.

Ist das ein Bug in IP-Symcon 5 Beta, ein Bug in PHP 7 oder was mache ich da falsch? Ich will einfach nur den String zu einem Integer umwandeln.

Ok, ich habe was gefunden was das zumindest erklärt:
Intval

Nur wie löse ich jetzt das Problem, das dennoch in ein Integer umzuwandeln? Oder muss ich damit leben, dass das eben ein String bleibt und schauen wie ich damit zurecht komme?

Der Wertebereich eines Integer ist halt beschränkt, und das gff. auch plattformabhängig.
Warum soll es ein Integer sein für deine Aufgabe? Brauchst du die volle Auflösung mit allen Stellen?

Wie Du sagst, habe ich das jetzt als String belassen, das ist für den Zweck ok, weil es nur ein eindeutiger Identifikator ist. Es muss also auch nicht damit gerechnet werden, daher kann das auch String bleiben, ich brauche aber die komplette Länge für die Aufgabenstellung.

Zitat aus PHP-Handbuch:

Beispiel #3 Integer overflow on a 64-bit system


<?php
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million = 1000000;
$large_number =  50000000000000 * $million;
var_dump($large_number);                     // float(5.0E+19)
?>

Wie Du allerdings auf ein 64-bit system kommst, weiß ich auch nicht :confused:
(Vielleicht kommt das noch mit einer höheren PHP-Version ?)

Viele Grüsse
Harald

Wie volkerm schon schrieb, ist der Wertebereich halt von der Plattform abhängig und daher begrenzt bei 32 bit Systemen:
32 bit systems have a maximum signed integer range of -2147483648 to 2147483647.

Das Thema gab es schon Mal, weil PHP 5.x einfach mit Float getrickst hat:
IPS_RunScriptEx Parameter Conversion Error
Außerdem kann IPS aktuell eh nur mit 32Bit Zahlen umgehen, auch unter Win64!
Somit am besten große (int) Zahlen vermeiden, wenn man für alle IPS Varianten kompatibel sein will.
Michael