2010-07-13 19 views
6

Tengo un octal que estoy usando para establecer permisos en un directorio.PHP: ¿Cómo convertir 0777 (un octal) a una cadena?

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

Y quiero compararlo con una cadena

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

¿Cuál sería la mejor manera de hacer esta comparación?

Respuesta

2

La mejor manera es:

if (0777 != $permissions) 

PHP reconoce literales octales (como su asignación de muestra).

Dicho esto, también se puede comparar cadenas en lugar de números enteros con:

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

simple reparto entero de esta manera:

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

También hay otra manera de poner permisos $ entre comillas dobles se también hace que PHP lo reconozca como una cadena:

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

Esto no funcionará; '(cadena) $ permisos' darán' 511'. – Artefacto

+0

¿Por qué dará 511? –

+0

$ permisos no es un número entero, es un octal – Andrew

-1

Hm ... ¿Tipo de fundición?

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

No lo sé afectará más tarde. (LAWL soy slowpoke)

6

¿Por qué no, en su caso, simplemente compare los dos valores numéricos?

De esta manera:

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


Sin embargo, para convertir un valor a una cadena que contiene la representación octal de un número, se podría utilizar sprintf, y el o especificador de tipo.

Por ejemplo, la porción de código siguiente:

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

le conseguirá:

string(4) "0777" 
+0

No creo que sea eso lo que está buscando. Esto es en lo que respecta a los permisos de Unix. 0777 equivaldría a a + rwx –

+1

+1 para 'sprintf ("% o ")' !! ¡Eso es lo que estaba buscando! – TMS

4

hacerlo a la inversa: convertir la cadena en un número y comparar los números:

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

Compruebe la función base_convert.

representación de cadena octal de un número

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

que puede hacer la conversión con cualquier tipo hexagonal, octal ....

Cuestiones relacionadas