PHP mkdir() 單層創建目錄,若父目錄不存在則失敗。PHP 5+ 新增 recursive 參數可一鍵遞歸創建,但 PHP 4 環境或需自定義邏輯時,需手動實現。
mkdir('/path/to/deep/dir', 0777, true); // 第三參數 recursive=true
簡潔高效,無需額外代碼。
function mkdirs($dir, $mode = 0777) {
if (is_dir($dir) || @mkdir($dir, $mode)) return true;
if (!mkdirs(dirname($dir), $mode)) return false;
return @mkdir($dir, $mode);
}
邏輯:檢查是否存在 → 嘗試創建 → 失敗則遞歸創建父目錄 → 再次創建當前目錄。
function create_folders($dir) {
return is_dir($dir) || (create_folders(dirname($dir)) && mkdir($dir, 0777));
}
利用短路求值:目錄存在直接返回真;否則遞歸創建父目錄成功後創建自身。
function mkdir_r($dirName, $rights = 0777) {
$dirs = explode('/', $dirName);
$dir = '';
foreach ($dirs as $part) {
$dir .= $part . '/';
if (!is_dir($dir) && strlen($dir) > 0) mkdir($dir, $rights);
}
}
將路徑按 / 分割,逐級創建,邏輯直觀,適合需要精細控制權限的場景。
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 內置 recursive | 原生、性能最優、代碼最少 | 需 PHP 5.0+ | 現代項目首選 |
| mkdirs 遞歸函數 | 兼容舊版本、邏輯清晰 | 遞歸深度受限、錯誤抑制需謹慎 | 歷史項目維護 |
| create_folders 單行版 | 極簡、利用短路特性 | 可讀性稍弱 | 追求代碼簡潔 |
| 遍歷分段創建 | 可控性強、易加入日誌/權限邏輯 | 代碼較長 | 複雜權限場景 |
mkdir($path, 0777, true)。create_folders,簡潔且無副作用。chmod($dir, 0777) 確保權限(Windows 忽略 mode)。