octdec()
Aprende la función PHP octdec(): convierte números octales a decimales, con sintaxis, valores de retorno, permisos de archivos y ejemplos en vivo.
La función octdec() convierte un número octal (base 8), dado como cadena de texto, en su equivalente decimal (base 10). Esta página cubre su sintaxis, valor de retorno, el uso más común en el mundo real (permisos de archivo Unix) y los errores frecuentes a tener en cuenta.
¿Qué es la función octdec()?
octdec() es una función integrada de PHP que recibe un número octal escrito como cadena y devuelve el entero decimal correspondiente.
Un repaso rápido a los sistemas numéricos:
- Octal (base 8) utiliza únicamente los dígitos
0–7. Cada posición es una potencia de 8. - Decimal (base 10) es el sistema cotidiano, que usa los dígitos
0–9.
Por ejemplo, la cadena octal "17" equivale a 1 × 8 + 7 × 1 = 15 en decimal. octdec() realiza ese cálculo por ti para que no tengas que computar potencias de 8 a mano.
Es la función inversa de decoct(), que convierte un número decimal de vuelta a una cadena octal.
Sintaxis
octdec(string $octal_string): int|float$octal_string— el valor octal a convertir, como cadena de texto (por ejemplo,"755").- Valor de retorno — el equivalente decimal. El resultado es un
int, pero PHP devuelve unfloatautomáticamente cuando el número es demasiado grande para caber en un entero de plataforma.
Cómo usar la función octdec()
Pasa el valor octal como cadena y octdec() devuelve el número decimal:
Aquí la cadena octal "10" equivale a 1 × 8 + 0 = 8 en decimal, por lo que el script imprime 8. Ten en cuenta que el octal "10" no es diez — es ocho, porque no existe el dígito 8 ni el 9 en base 8.
Conversión de varios valores
Ver varias conversiones lado a lado hace que el patrón de base 8 quede más claro:
<?php
echo octdec("7"), "\n"; // 7 (7 × 1)
echo octdec("10"), "\n"; // 8 (1 × 8 + 0)
echo octdec("17"), "\n"; // 15 (1 × 8 + 7)
echo octdec("100"), "\n"; // 64 (1 × 64)
echo octdec("777"), "\n"; // 511 (7 × 64 + 7 × 8 + 7)
?>Uso en el mundo real: permisos de archivos
La razón más común para recurrir a octdec() son los permisos de archivo Unix. Funciones como chmod() esperan un entero, pero los permisos casi siempre se escriben y discuten en octal (755, 644, etc.). Pasar una cadena de permisos directamente falla silenciosamente, así que conviértela primero:
<?php
$octalPermission = "755";
// Convert the octal permission string to the integer chmod() needs
$mode = octdec($octalPermission);
echo "Octal 755 = decimal {$mode}\n"; // Octal 755 = decimal 493
// chmod("script.sh", $mode); // applies rwxr-xr-x
?>Esto imprime Octal 755 = decimal 493. Un error frecuente es llamar a chmod("file", 755) con un literal decimal simple — eso establece los bits de permiso incorrectos. Escribe el literal octal 0755 o construye el valor con octdec("755").
Cosas a tener en cuenta
octdec() ignora silenciosamente cualquier carácter que no sea un dígito octal válido (0–7). Así, octdec("90") no lanza un error — descarta el 9 inválido y queda 0, devolviendo 0. Valida tu entrada antes de convertirla si puede contener caracteres no válidos.
Algunos puntos más a considerar:
- La entrada debe contener solo dígitos octales. Los dígitos
8y9no son válidos en base 8 y se descartan. - Pasa una cadena, no un literal. Escribir
octdec(017)primero interpreta017como un literal octal (decimal 15) antes de convertirlo de nuevo — raramente es lo que se desea. Usaoctdec("17"). - Los valores grandes devuelven un float. Las cadenas octales muy largas superan
PHP_INT_MAX, por lo queoctdec()devuelve un número de punto flotante en lugar de un entero.
Funciones relacionadas
decoct()— la inversa: de decimal a octal.hexdec()/dechex()— convierten entre hexadecimal y decimal.bindec()/decbin()— convierten entre binario y decimal.intval()— analiza una cadena a entero en una base arbitraria (intval($str, 8)es otra forma de leer octal).
Conclusión
La función octdec() convierte una cadena octal en un entero decimal, lo cual es esencial cuando se trabaja con permisos de archivo o cualquier dato en base 8 en PHP. Recuerda pasar el valor como cadena, validar la entrada que pueda contener caracteres no octales, y recurrir a decoct() cuando necesites convertir en la dirección contraria.