2010-07-13 24 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); 

,你可以做任何類型的十六進制,八進制轉換....

相關問題