echo konvertiert deine Zahl zu einen String um es darzustellen.
wenn du echo (int)$long im ersten Script einfügst, kommt auch schon -2147483648 raus :rolleyes:
Warum PHP teilweise mit größeren Zahlen umgehen kann, siehst du wenn du var_dump nutzt.
PHP konvertiert es dann zu einem Float.
Beispiel:
<?
$long = 2147483647 + 1;
echo $long.PHP_EOL; // String 2147483648
echo (int)$long.PHP_EOL; // int -2147483648
var_dump($long); // float 2147483648
IPS_RunScriptEx(10048 /* script siehe unten */, [ "LONG" => $long ]);
IPS_RunScriptEx(10048 /* script siehe unten */, [ "LONG" => (int)$long ]);
IPS_RunScriptEx(10048 /* script siehe unten */, [ "LONG" => (float)$long ]);
<?
var_dump($_IPS['LONG']); // var_dump um zu prüfen ob der Variablentyp korrekt ist
Ausgabe IPS 4.4 (PHP 5.X):
2147483648
-2147483648
float(2147483648)
15.05.2018 20:03:28 | ScriptEngine | Ergebnis für Skript 10048
float(2147483648)
15.05.2018 20:03:28 | ScriptEngine | Ergebnis für Skript 10048
int(-2147483648)
15.05.2018 20:03:28 | ScriptEngine | Ergebnis für Skript 10048
float(2147483648)
Ausgabe IPS 5.0 (PHP 7.2):
2147483648
2147483648
int(2147483648)
15.05.2018 20:07:16 | ScriptEngine | Ergebnis für Skript 10048
int(-2147483648)
15.05.2018 20:07:16 | ScriptEngine | Ergebnis für Skript 10048
int(-2147483648)
15.05.2018 20:11:18 | ScriptEngine | Ergebnis für Skript 10048
float(2147483648)
Somit halten wir fest.
PHP 5.6 hat getrickst und einfach einen Float aus den Wert gemacht.
IPS hat es auch als Float verarbeitet. Somit waren größere Zahlen möglich.
PHP 7.2 x64 kann mit größeren integern umgehen und gibt es so als integer an IPS weiter.
IPS arbeitet intern mit 32Bit, somit wurde aus dem Int (korrekt) ein -2147483648.
Um das gewünschte Verhalten der Konvertierung zu einen Float zu bekommen (wie bei PHP 5.X) , einfach einen cast (float) bei der Übergabe der Parameter anwenden.
Nur weil PHP 5.X getrickst hat, und du es ausgenutzt hast; kann Symcon dafür nix
Michael