2010-07-13 10 views
6

J'ai un octal que j'utilise pour définir des autorisations sur un répertoire.PHP: Comment convertir 0777 (un octal) en une chaîne?

$permissions = 0777; 
mkdir($directory, $permissions, true) 

Et je veux le comparer à une chaîne

$expectedPermissions = '0777'; //must be a string 
if ($expectedPermissions != $permissions) { 
    //do something 
} 

Quelle serait la meilleure façon de faire cette comparaison?

Répondre

2

La meilleure façon est:

if (0777 != $permissions) 

PHP reconnaît littéraux octal (comme votre mission montre).

Cela dit, vous pouvez aussi comparer des chaînes au lieu d'entiers avec:

if ('0777' != "0" . sprintf("%o", $permissions)) 
0

coulé simplement l'entier comme ceci:

if('0777' != (string)$permissions) { // do something } 

Il y a aussi une autre façon de mettre les permissions de $ guillemets doubles seront aussi faire PHP le reconnaître comme une chaîne:

if('0777' != "$permissions") { // do something } 
+0

Cela ne fonctionnera pas; '(chaîne) $ permissions' donnera' 511'. – Artefacto

+0

Pourquoi donnera-t-il 511? –

+0

$ permissions n'est pas un nombre entier, c'est un octal – Andrew

-1

Hm ... Type coulée?

if ((string)$permissions != '0777') { 
//do something 
} 

Je ne sais pas cela affectera plus tard. (LAWL je suis slowpoke)

6

Pourquoi ne pas, dans votre cas, simplement comparer les deux valeurs numériques?

Comme ceci:

if (0777 != $permissions) { 
    //do something 
} 


encore, pour convertir une valeur à une chaîne contenant la représentation octal d'un certain nombre, vous pouvez utiliser sprintf et le o spécificateur de type.

Par exemple, la partie de code suivante:

var_dump(sprintf("%04o", 0777)); 

Est-ce que vous obtenez:

string(4) "0777" 
+0

Je ne pense pas que ce soit ce qu'il cherche. C'est en ce qui concerne les autorisations UNIX. 0777 équivaudrait à un + rwx –

+1

+1 pour 'sprintf ("% o ")' !! C'est ce que je cherchais! – TMS

4

Do it l'inverse: convertir la chaîne en nombre et comparer les chiffres:

if (intval($expectedPermissions, 8) != $permissions) { // 8 specifies octal base for conversion 
    // do something 
} 
2

Vérifiez la fonction base_convert.

représentation de chaîne octal d'un nombre

$str = base_convert((string) 00032432, 10, 8); 

vous pouvez faire la conversion avec un hexagone de type, octal ....

Questions connexes