Noté que ocurría un error solo con XAMPP.
Probé con otras 4 cuentas de alojamiento en vivo (incluidas AWS, hostgator y otras 2), todas actúan de la misma manera sobre los números pero no sobre XAMPP. Esto es lo que sucede cuando se ejecuta el mismo eco en servidores reales y XAMPP:
/* ALL SERVERS */ $testid = 5039307356925138; echo (int)$testid;// 5039307356925138 echo $testid;// 5039307356925138 /* XAMPP AT WINDOWS 10 LOCALHOST*/ $testid = 5039307356925138; echo (int)$testid;// 753691858 echo $testid;// 5.03930735692514E+15¿¡Qué significa esto y por qué!?
Después de trabajar durante horas en el tema, revisando cada publicación del foro,
Aumenté la precisión en php.ini y reinicié apache:
precisión = 20 (¡tenga en cuenta que todos los servidores en vivo son solo 12!)
Ahora es:
/* XAMPP */ $testid = 5039307356925138; echo (int)$testid;// 753691858 echo $testid;// 5039307356925138Como ya puede adivinar, todavía no es una solución y los scripts no se ejecutan correctamente porque XAMPP trata 5039307356925138 como 753691858?!?
Además, aumentar demasiado la precisión causó problemas como 3.250000000001% o algo donde se usan otros números.
Intenté volver a instalar XAMPP con una nueva versión e intenté esto en otra computadora, pero todos son iguales.
Para aquellos de ustedes que usan XAMPP en Windows localhost, ¿ven el mismo problema?
¿Cuál podría ser la causa? ¿¿¿¿Como arreglarlo????
Como está utilizando XAMPP, solo tiene 32 bits para Windows. Esto a su vez significa que el número no puede exceder el rango de [−2 147 483 648, 2 147 483 647]. En Linux e iOS, creo que hay una versión de 64 bits para XAMPP.
Por lo tanto, es muy probable que sus hosts usen una versión de 64 bits, lo que permitiría el uso de números mucho más altos como enteros. Lo que está viendo se está desbordando , se alcanza el límite y "comienza de nuevo" desde el rango inferior.
Dado que PHP se escribe de forma flexible, una cadena y un entero se pueden comparar con el mismo valor, por ejemplo
"10" == 10 // true "11" == 10 // false "10" === 10 // false because of strict comparisonEntonces podría ser una solución trabajar con cadenas en lugar de números enteros (porque no hay limitación en la longitud de una cadena).
Desde el anuncio de lanzamiento de PHP7, se anunció que a partir de PHP7 habrá soporte constante para 64 bits. Entonces, si el sistema operativo lo ejecuta y el motor es de 64 bits con PHP7 o superior, tendrá soporte completo para 64 bits (lo que a su vez le permite usar valores enteros más altos).