2011-06-20 42 views
1

我正在使用PHP的mkdir函數,並且在$ mode參數中遇到了一些困難。如果我沒有指定一個參數,我將獲得UNIX 755作爲新目錄的默認權限設置。我想設置爲UNIX 777的許可,所以我這樣做,因爲你在這裏看到:需要幫助通過PHP在新目錄上設置Chmod權限

$mode = '0700'; 
mkdir($newdir, $mode); 

當我這樣做,這是創建一個文件夾,但我不能用它做任何事情。其實我甚至不能刪除它!我所能做的就是通過FTP重命名...

然後我試着設置$ mode ='0600';這使得一個可用的文件夾,但權限設置爲UNIX 110.這是如何可能的?它不應該是600的UNIX值嗎?有沒有我在這裏錯過的轉換?謝謝。

+0

[PHP代碼mkdir('images','0777')可能重複創建一個具有411權限的文件夾!爲什麼?](http://stackoverflow.com/questions/2251283/php-code-mkdirimages-0777-creates-a-folder-with-411-permissions-why) –

+0

哪個用戶在創建文件夾時擁有該文件夾,以及哪個用戶用戶通過FTP使用嗎?如果FTP和PHP用戶不匹配,那麼0700將拒絕訪問(即使您修復了Ignacio發現的問題;) –

回答

1

該模式應該是一個數字,而不是一個字符串。改爲嘗試$mode = 0700;

+0

工作正常,但是當我將它設置爲$ mode = 0777;並運行該文件,相當於該文件夾獲得的UNIX設置爲0755.我仍然不理解該部分,但正如其他答案所言,它可能是一個umask問題。 – Presto

+0

是的,這將是一個醜陋的問題。儘管如此,您可以將權限設置爲最終值。 –

0

據php.net手冊的mkdir功能有這樣的描述:

bool mkdir (string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]]) 

$這裏模式是一個整數(不是字符串),它必須以「0」,因爲它8型(不啓動基於10個)。

更新:(從php.net)請注意,您可能要指定的模式作爲一個八進制數,這意味着它應該有一個前導零。該模式也由當前的umask修改,您可以使用umask()更改該模式。

+1

它不需要*以'0'開頭,但省略它會增加讀取/寫入值所需的數學量。 –

+0

我知道,但我的意思是,如果您想使用Unix-「標準」權限(如果您希望代碼中的755將是文件系統中的755,或者我們可以使用基於10的數字,然後:493(10)== 755(8))。 –

0

如果你想將其設置爲0777,試試這個:

oldumask = umask(0); 
mkdir('mydir', 0777); 
umask($oldumask); 

瞭解更多關於umask的作爲目錄的權限是umask的組合,你指定的內容。