PHP mkdir()無寫入權限的問題解決方案_PHP教程

來源:互聯網
上載者:User
使用mkdir建立檔案夾時,發現這個函數有兩個參數,第二個參數是為新建立的檔案夾指定許可權。

但是如果直接用mkdir('檔案地址', 0777);時 發現新檔案夾的許可權並不是777,一般情況下會是022。

因為mkdir在給檔案夾制定許可權時,會跟當前登入作業系統使用者的umask(使用者預設許可權屬 性)值進行位“與”,得到的值才是最終許可權值。

umask 是什嗎?

我們建立檔案的預設許可權是怎麼來的?如何改變這個預設許可權呢?

當我們登入系統之後建立一個檔案總是有一個預設許可權的,那麼這個許可權是怎麼來的呢?這就是 umask 乾的事情。

umask 設定了使用者建立檔案的預設許可權,它與 chmod 的效果剛好相反,umask 設定的是許可權“補碼”,而 chmod 設定的是檔案許可權碼。一般在 /etc/profile、$HOME/.bash_profile 或 $HOME/.profile 中設定 umask 值。

如何計算 umask 值?

umask 命令允許你設定檔案建立時的預設模式,對應每一類使用者(檔案屬主、同組使用者、其他使用者)存在一個相應的 umask 值中的數字。對於檔案來說,這一數位最大值分別是 6。系統不允許你在建立一個文字檔時就賦予它執行許可權,必須在建立後用 chmod 命令增加這一許可權。目錄則允許設定執行許可權,這樣針對目錄來說,umask 中各個數字最大可以到 7。

該命令的一般形式為:umask nnn,其中 nnn 可為 000 - 777。

我們只要記住 umask 是從許可權中“拿走”相應的位即可。

如:umask 值為 022,則預設目錄許可權為 755,預設檔案許可權為 644。
所以,如果使用者umask是022(一般預設是這個),即:000 010 010 在於mkdir指定的777 ,即:111 111 111 位“與”後,得到的真實許可權為:022。

如果想讓建立檔案夾許可權最大,有兩種方法可以實現:(當然,是在目前使用者能賦予最高許可權的條件下)

1、修改使用者umask,php提供有umask函數:

複製代碼 代碼如下:
$oldumask=umask(0);
mkdir('test',0777);
umask($oldumask);

這種方法看起來一勞永逸,在指令碼開標頭檔裡指定下umask值,後面直接用mkdir就可以控制許可權,需要注意的是:在多線程伺服器上使用umask函數時,多個線程會公用一個umask,所以可能會造成混亂。

2、使用chmod函數,這也是最常用的方法:
複製代碼 代碼如下:
mkdir('檔案地址', 0777);
chmod('檔案地址', 0777);

最後,需要注意一點,許可權值最好使用八進位表示,即“0”開頭,而且一定不要加引號。

http://www.bkjia.com/PHPjc/825396.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/825396.htmlTechArticle使用mkdir建立檔案夾時,發現這個函數有兩個參數,第二個參數是為新建立的檔案夾指定許可權。 但是如果直接用mkdir('檔案地址', 0777);時 發...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.