2010-07-13 90 views
6

我有一个八进制数,我用它来设置目录的权限。PHP:如何将0777(八进制)转换为字符串?

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

而且我想把它比作一个字符串

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

什么是做这种比较的最佳方式?

回答

2

最好的办法是:

if (0777 != $permissions) 

PHP识别八进制文本(如您的任务显示)。

这就是说,你还可以比较字符串,而不是用整数:

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

可简单地把像这样的整数:

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

也有另一种方式把$权限在双引号会也让PHP将它识别为一个字符串:

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

这将无法正常工作; '(字符串)$ permissions'将给出'511'。 – Artefacto 2010-07-13 17:48:17

+0

为什么会给511? – 2010-07-13 19:18:31

+0

$ permissions不是一个整数,它是一个八进制 – Andrew 2010-07-13 20:38:20

-1

嗯......类型铸造?

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

我不知道会影响以后。 (LAWL我slowpoke)

6

为什么不,在你的情况下,只是比较两个数值?

像这样:

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


不过,到一个值转换为包含数字的八进制表示的字符串,你可以使用sprintfo类型说明符

例如,下面的代码部分:

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

会得到你:

string(4) "0777" 
+0

我不认为这是他正在寻找的东西。这是关于unix权限的。 0777相当于+ spwf(“%o”)'+ rwx – 2010-07-13 17:50:54

+1

+1!这就是我一直在寻找的! – TMS 2012-02-26 08:04:16

4

轮做它的其他方式:字符串转换为数字和比较的数字:

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

检查base_convert函数。一些

八进制字符串表示

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

,你可以做任何类型的十六进制,八进制转换....

相关问题