decoct()
Découvrez la fonction decoct() en PHP, qui convertit un entier décimal en sa représentation octale sous forme de string.
La fonction decoct() convertit un entier décimal (base 10) en sa représentation octale (base 8) sous forme de string. C'est l'outil intégré de PHP pour la conversion décimal vers octal, l'inverse de octdec().
L'octal apparaît encore dans du vrai code — notamment dans les permissions de fichiers Unix, où 0755 et 0644 sont des valeurs octales. decoct() vous permet de convertir un entier de permission calculé en la chaîne à trois chiffres familière.
Syntaxe
decoct(int $num): string$num— l'entier décimal à convertir. Si un flottant est passé, il est tronqué en entier au préalable.- Valeur de retour — une string contenant la représentation octale. Le résultat est une string, pas un nombre, car les valeurs octales sont généralement affichées plutôt qu'utilisées dans des calculs supplémentaires.
Le plus grand nombre pouvant être converti dépend de la taille des entiers de la plateforme (PHP_INT_MAX). Les nombres négatifs sont interprétés en utilisant leur représentation en complément à deux pour la taille de mot de la plateforme.
Exemple de base
Le décimal 15 correspond à 17 en octal (1 * 8 + 7 = 15). Notez que echo affiche 17 sans zéro en tête — decoct() n'ajoute jamais le préfixe 0 que les littéraux octaux utilisent dans le code source.
Valeurs courantes
<?php
echo decoct(8); // 10
echo "\n";
echo decoct(64); // 100
echo "\n";
echo decoct(493); // 755 (the rwxr-xr-x permission set)
?>Puisque 493 en octal vaut 755, decoct() est pratique lorsque vous lisez un mode de fichier numérique et souhaitez l'afficher tel que chmod le attend.
Lecture des bits de permission d'un fichier
fileperms() retourne le mode incluant les bits de type de fichier, donc masquez avec & 0777 pour ne conserver que la partie permissions avant la conversion :
<?php
$mode = 0755; // octal literal -> stored as decimal 493
echo decoct($mode & 0777); // 755
?>Points d'attention
- La sortie est une string sans zéro en tête. Si vous avez besoin de la forme conventionnelle à quatre caractères, ajoutez-le vous-même :
'0' . decoct(493)donne"0755". - Les flottants sont tronqués, pas arrondis.
decoct(15.9)retourne"17"(identique àdecoct(15)), car le flottant est d'abord converti enint. - Elle ne gère que les entiers. Pour convertir entre des bases arbitraires, utilisez
base_convert()à la place.
Fonctions associées
octdec()— l'inverse : string octale vers décimal.dechex()etdecbin()— convertit le décimal en hexadécimal et en binaire.base_convert()— convertit un nombre entre deux bases quelconques de 2 à 36.