octdec()
Aprenda a função PHP octdec(): converta números octais para decimal, com sintaxe, valores de retorno, exemplos de permissões de arquivo e demos ao vivo.
A função octdec() converte um número octal (base 8), fornecido como string, no seu equivalente decimal (base 10). Esta página aborda sua sintaxe, valor de retorno, o uso mais comum no mundo real (permissões de arquivo Unix) e os cuidados a ter.
O que é a Função octdec()?
octdec() é uma função PHP integrada que recebe um número octal escrito como string e retorna o inteiro decimal correspondente.
Uma revisão rápida dos sistemas de numeração:
- Octal (base 8) usa apenas os dígitos
0–7. Cada posição é uma potência de 8. - Decimal (base 10) é o sistema do cotidiano, usando os dígitos
0–9.
Por exemplo, a string octal "17" significa 1 × 8 + 7 × 1 = 15 em decimal. octdec() faz esse cálculo para você, sem precisar calcular potências de 8 manualmente.
É o inverso de decoct(), que converte um número decimal de volta para uma string octal.
Sintaxe
octdec(string $octal_string): int|float$octal_string— o valor octal a converter, como string (por exemplo,"755").- Valor de retorno — o equivalente decimal. O resultado é um
int, mas o PHP retorna umfloatautomaticamente quando o número é grande demais para caber em um inteiro da plataforma.
Como Usar a Função octdec()
Passe o valor octal como string e octdec() retorna o número decimal:
Aqui a string octal "10" equivale a 1 × 8 + 0 = 8 em decimal, então o script imprime 8. Note que octal "10" não é dez — é oito, porque não existe o dígito 8 ou 9 na base 8.
Convertendo Vários Valores
Observar algumas conversões lado a lado torna o padrão de base 8 mais 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 no Mundo Real: Permissões de Arquivo
O motivo mais comum para usar octdec() são as permissões de arquivo Unix. Funções como chmod() esperam um inteiro, mas as permissões são quase sempre escritas e discutidas em octal (755, 644, etc.). Passar uma string de permissão diretamente falha silenciosamente, por isso converta-a primeiro:
<?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
?>Isso imprime Octal 755 = decimal 493. Um erro comum é chamar chmod("file", 755) com um literal decimal simples — isso define os bits de permissão errados. Escreva o literal octal 0755 ou construa o valor com octdec("755").
Cuidados a Ter
octdec() ignora silenciosamente qualquer caractere que não seja um dígito octal válido (0–7). Portanto, octdec("90") não gera um erro — ele descarta o 9 inválido e o 0 permanece, retornando 0. Valide sua entrada antes de converter se ela puder conter caracteres inválidos.
Mais alguns pontos a considerar:
- A entrada deve conter apenas dígitos octais. Os dígitos
8e9não são válidos na base 8 e são descartados. - Passe uma string, não um literal. Escrever
octdec(017)primeiro interpreta017como um literal octal (decimal 15) antes de convertê-lo novamente — raramente é o que se deseja. Useoctdec("17"). - Valores grandes retornam um float. Strings octais muito grandes excedem
PHP_INT_MAX, entãooctdec()retorna um número de ponto flutuante em vez de um inteiro.
Funções Relacionadas
decoct()— o inverso: decimal para octal.hexdec()/dechex()— converte entre hexadecimal e decimal.bindec()/decbin()— converte entre binário e decimal.intval()— analisa uma string para um inteiro em uma base arbitrária (intval($str, 8)é outra forma de ler octal).
Conclusão
A função octdec() transforma uma string octal em um inteiro decimal, o que é essencial sempre que você trabalha com permissões de arquivo ou qualquer dado de base 8 em PHP. Lembre-se de passar o valor como string, validar entradas que possam conter caracteres não octais e usar decoct() quando precisar converter na direção oposta.