首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP mkdir() 建立目錄權限陷阱與安全設定最佳實踐

     編輯:PHP 綜合知識

現象:指定 0777 卻得到 0755

mkdir('./aa/', 0777); // 實際權限為 0755

根本原因:umask 遮罩機制

mkdir() 實際權限 = mode & ~umask。Linux 預設 umask=0022,導致 0777 & ~0022 = 0755。

驗證實驗

umask          # 顯示 0022
php -r "mkdir('./xw/', 0777);"
ls -l          # drwxr-xr-x (0755)

umask 000      # 暫時關閉遮罩
php -r "mkdir('./xw2/', 0777);"
ls -l          # drwxrwxrwx (0777)

解決方案對比

| 方法 | 程式碼 | 是否受 umask 影響 | 推薦度 | |------|--------|-------------------|--------| | mkdir 單獨指定 | `mkdir('./dir/', 0777)` | 是 | ❌ | | mkdir + chmod | `mkdir('./dir/'); chmod('./dir/', 0777);` | 否 | ✅ **推薦** | | 系統 mkdir -m | `exec('mkdir -m 0777 dir')` | 否 | ⚠️ 需執行權限 |

最佳實踐代碼

// 建立目錄(預設權限)
mkdir('./xw/', 0777, true);  // true 為遞迴建立

// 明確設定權限,繞過 umask
chmod('./xw/', 0777);

補充說明

  • mkdir() 第三參數 recursive 允許遞迴建立多層目錄
  • 生產環境建議權限 0755 目錄、0644 檔案,避免 0777 安全風險
  • 共享主機環境 umask 通常不可變,必須用 chmod() 修正
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved