Solución:
Esto proviene de los cambios realizados en la forma en que se manejan los enteros, específicamente los octales, en PHP7 (como oppsoed a PHP5).
De la documentación (de la migración PHP7)
Literales octales no válidos
Anteriormente, los literales octales que contenían números no válidos se truncaban silenciosamente (0128 se tomaba como 012). Ahora, un literal octal no válido provocará un error de análisis.
De la documentación de enteros
Antes de PHP 7, si se proporcionaba un dígito no válido en un entero octal (es decir, 8 o 9), se ignoraba el resto del número. Desde PHP 7, se emite un error de análisis.
Úselos como cadenas o como enteros reales
$a = array(1, 8, 9, 12); // Integers
$a = array("00001", "00008", "00009", "00012"); // Strings
- Ejemplo de PHP7 vs PHP5: https://3v4l.org/GRZF2
- http://php.net/manual/en/language.types.integer.php
- Manual: http://php.net/manual/en/migration70.incompatible.php
Esto se debe a que todos los números que comienzan con 0 se consideran valores octales, que tienen un límite superior de 8 dígitos por posición (0-7). Como se indica en el manual de PHP, en lugar de eliminar silenciosamente los dígitos no válidos, ahora (7.x) producen la advertencia anterior.
¿Por qué escribes tus números así? Si los ceros iniciales son significativos, entonces no es un número que tienes, sino una cadena. Si necesita hacer cálculos en ellos como si fueran números, entonces debe agregar los ceros iniciales cuando envíe los valores al cliente.
Esto se puede hacer con printf()
o sprintf()
como esto:
$number = 5;
printf ("%05$1d", $number);
Consulte el manual para obtener más ejemplos.