decoct()
Aprenda sobre a função decoct() em PHP, usada para converter um número decimal em sua representação octal.
A função decoct() converte um inteiro decimal (base 10) em sua representação string octal (base 8). É a ferramenta nativa do PHP para a conversão no sentido decimal-para-octal, o inverso de octdec().
O sistema octal ainda aparece em código real — especialmente nas permissões de arquivos Unix, onde 0755 e 0644 são valores octais. decoct() permite transformar um inteiro de permissão calculado de volta na familiar string de três dígitos.
Sintaxe
decoct(int $num): string$num— o inteiro decimal a ser convertido. Se um float for passado, ele é truncado para inteiro primeiro.- Valor de retorno — uma string contendo a representação octal. O resultado é uma string, não um número, porque valores octais geralmente são exibidos em vez de usados em cálculos adicionais.
O maior número que pode ser convertido depende do tamanho do inteiro da plataforma (PHP_INT_MAX). Números negativos são interpretados usando seu padrão de bits em complemento de dois para o tamanho de palavra da plataforma.
Exemplo básico
O decimal 15 equivale a 17 em octal (1 * 8 + 7 = 15). Observe que echo imprime 17 sem zero inicial — decoct() nunca adiciona o prefixo 0 que os literais octais usam no código-fonte.
Valores comuns
<?php
echo decoct(8); // 10
echo "\n";
echo decoct(64); // 100
echo "\n";
echo decoct(493); // 755 (the rwxr-xr-x permission set)
?>Como 493 em octal é 755, decoct() é útil quando você lê um modo de arquivo numérico e deseja exibi-lo da forma que o chmod espera.
Lendo os bits de permissão de um arquivo
fileperms() retorna o modo incluindo os bits de tipo de arquivo, então use & 0777 para manter apenas a parte de permissão antes de converter:
<?php
$mode = 0755; // octal literal -> stored as decimal 493
echo decoct($mode & 0777); // 755
?>Armadilhas
- A saída é uma string sem zero inicial. Se você precisar do formato convencional de quatro caracteres, adicione-o manualmente:
'0' . decoct(493)resulta em"0755". - Floats são truncados, não arredondados.
decoct(15.9)retorna"17"(igual adecoct(15)), porque o float é convertido paraintprimeiro. - Só lida com inteiros. Para converter entre bases arbitrárias, use
base_convert().
Funções relacionadas
octdec()— o inverso: string octal de volta para decimal.dechex()edecbin()— convertem decimal para hexadecimal e binário.base_convert()— converte um número entre quaisquer duas bases de 2 a 36.