PHP mkdir()無寫權(quán)限的問題解決方法
使用mkdir創(chuàng)建文件夾時(shí),發(fā)現(xiàn)這個(gè)函數(shù)有兩個(gè)參數(shù),第二個(gè)參數(shù)是為新創(chuàng)建的文件夾指定權(quán)限。
但是如果直接用mkdir('文件地址', 0777);時(shí) 發(fā)現(xiàn)新文件夾的權(quán)限并不是777,一般情況下會(huì)是022。
因?yàn)閙kdir在給文件夾制定權(quán)限時(shí),會(huì)跟當(dāng)前登錄操作系統(tǒng)用戶的umask(用戶缺省權(quán)限屬 性)值進(jìn)行位“與”,得到的值才是最終權(quán)限值。
umask 是什么?
我們創(chuàng)建文件的默認(rèn)權(quán)限是怎么來的?如何改變這個(gè)默認(rèn)權(quán)限呢?
當(dāng)我們登錄系統(tǒng)之后創(chuàng)建一個(gè)文件總是有一個(gè)默認(rèn)權(quán)限的,那么這個(gè)權(quán)限是怎么來的呢?這就是 umask 干的事情。
umask 設(shè)置了用戶創(chuàng)建文件的默認(rèn)權(quán)限,它與 chmod 的效果剛好相反,umask 設(shè)置的是權(quán)限“補(bǔ)碼”,而 chmod 設(shè)置的是文件權(quán)限碼。一般在 /etc/profile、$HOME/.bash_profile 或 $HOME/.profile 中設(shè)置 umask 值。
如何計(jì)算 umask 值?
umask 命令允許你設(shè)定文件創(chuàng)建時(shí)的缺省模式,對應(yīng)每一類用戶(文件屬主、同組用戶、其他用戶)存在一個(gè)相應(yīng)的 umask 值中的數(shù)字。對于文件來說,這一數(shù)字的最大值分別是 6。系統(tǒng)不允許你在創(chuàng)建一個(gè)文本文件時(shí)就賦予它執(zhí)行權(quán)限,必須在創(chuàng)建后用 chmod 命令增加這一權(quán)限。目錄則允許設(shè)置執(zhí)行權(quán)限,這樣針對目錄來說,umask 中各個(gè)數(shù)字最大可以到 7。
該命令的一般形式為:umask nnn,其中 nnn 可為 000 - 777。
我們只要記住 umask 是從權(quán)限中“拿走”相應(yīng)的位即可。
如:umask 值為 022,則默認(rèn)目錄權(quán)限為 755,默認(rèn)文件權(quán)限為 644。
所以,如果用戶umask是022(一般默認(rèn)是這個(gè)),即:000 010 010 在于mkdir指定的777 ,即:111 111 111 位“與”后,得到的真實(shí)權(quán)限為:022。
如果想讓新建文件夾權(quán)限最大,有兩種方法可以實(shí)現(xiàn):(當(dāng)然,是在當(dāng)前用戶能賦予最高權(quán)限的條件下)
1、修改用戶umask,php提供有umask函數(shù):
$oldumask=umask(0);
mkdir('test',0777);
umask($oldumask);
這種方法看起來一勞永逸,在腳本開頭文件里指定下umask值,后面直接用mkdir就可以控制權(quán)限,需要注意的是:在多線程服務(wù)器上使用umask函數(shù)時(shí),多個(gè)線程會(huì)公用一個(gè)umask,所以可能會(huì)造成混亂。
2、使用chmod函數(shù),這也是最常用的方法:
mkdir('文件地址', 0777);
chmod('文件地址', 0777);
最后,需要注意一點(diǎn),權(quán)限值最好使用八進(jìn)制表示,即“0”開頭,而且一定不要加引號(hào)。
相關(guān)文章
tp5.1 框架數(shù)據(jù)庫常見操作詳解【添加、刪除、更新、查詢】
這篇文章主要介紹了tp5.1 框架數(shù)據(jù)庫常見操作,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP5.1針對數(shù)據(jù)庫的添加、刪除、更新、查詢相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-05-05php使用get和post傳遞數(shù)據(jù)出現(xiàn)414?Request-URI?Too?Large的原因分析及解決方案
Request-URI Too Large(請求URI過長)是一個(gè)HTTP錯(cuò)誤狀態(tài)碼,表示所發(fā)送的HTTP請求中的URI(統(tǒng)一資源標(biāo)識(shí)符)長度超過了服務(wù)器能夠處理的限制,這篇文章主要介紹了php使用get和post傳遞數(shù)據(jù)出現(xiàn)414?Request-URI Too?Large的解決方案,需要的朋友可以參考下2023-08-08laravel框架之?dāng)?shù)據(jù)庫查出來的對象實(shí)現(xiàn)轉(zhuǎn)化為數(shù)組
今天小編就為大家分享一篇laravel框架之?dāng)?shù)據(jù)庫查出來的對象實(shí)現(xiàn)轉(zhuǎn)化為數(shù)組,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10PHP正則表達(dá)式過濾html標(biāo)簽屬性(DEMO)
這篇文章主要介紹了PHP正則表達(dá)式過濾html標(biāo)簽屬性的相關(guān)內(nèi)容,實(shí)用性非常,感興趣的朋友參考下吧2016-05-05thinkphp 5框架實(shí)現(xiàn)登陸,登出及session登陸狀態(tài)檢測功能示例
這篇文章主要介紹了thinkphp 5框架實(shí)現(xiàn)登陸,登出及session登陸狀態(tài)檢測功能,結(jié)合實(shí)例形式分析了thinkPHP5登陸判斷、跳轉(zhuǎn)及session的相關(guān)使用技巧,需要的朋友可以參考下2019-10-10yii2局部關(guān)閉(開啟)csrf的驗(yàn)證的實(shí)例代碼
本篇文章主要介紹了yii2局部關(guān)閉(開啟)csrf的驗(yàn)證的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07