簡體   English   中英

為什么PHP不能創建777權限的目錄?

[英]Why can't PHP create a directory with 777 permissions?

我正在嘗試使用 PHP 和以下命令在我的服務器上創建一個目錄:

mkdir("test", 0777);

但它沒有提供完全權限,只有這些:

rwxr-xr-x

該模式由您當前的umask修改,在本例中為022

umask工作方式是一種減法。 您獲取mkdir的初始權限並減去umask以獲得實際權限:

  0777
- 0022
======
  0755 = rwxr-xr-x.

如果您不希望發生這種情況,則需要將umask暫時設置為零以使其無效。 您可以使用以下代碼段執行此操作:

$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);

第一行將umask更改為零,同時將前一個存儲到$oldmask 第二行使用所需的權限和(現在不相關的) umask 第三行將umask恢復到原來的樣子。

有關更多詳細信息,請參閱umaskmkdir的 PHP doco。

文件和目錄的創建受 umask 的設置影響。 您可以通過操作 umask 來創建具有特定權限集的文件,如下所示:-

$old = umask(0);
mkdir("test", 0777);
umask($old);

避免在多線程 Web 服務器中使用此函數。 創建文件后最好使用 chmod() 更改文件權限。

例子:

$dir = "test";
$permit = 0777;

mkdir($dir);
chmod($dir, $permit);

對於那些嘗試過的人

mkdir('path', 777);

它沒有用。

這是因為,顯然,文件模式前面的 0 非常重要,它告訴 chmod 將傳遞的數字解釋為八進制而不是十進制。

參考

附言。 這不是問題的解決方案,而只是已接受的 anwser 的附加組件

可能,您的umask設置為排除那些

就我而言,我必須對centos7使用以下方式,解決了問題

$oldmask = umask(000);//it will set the new umask and returns the old one 
mkdir("test", 0777);
umask($oldmask);//reset the old umask

更多細節可以在https://www.php.net/manual/en/function.umask.php找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM