mkdir() 預設僅能建立單層目錄,父目錄不存在時會失敗。PHP 5.0.0 新增 recursive 參數,設為 true 即可遞歸建立:
mkdir('/path/to/deep/dir', 0777, true); // PHP 5+ 一行搞定
Windows 環境下 mode 參數會被忽略。
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);
}
原理:先嘗試建立目標目錄,失敗則遞歸建立父目錄,最後再建立目標目錄。使用 @ 抑制警告,配合 is_dir() 判斷存在性。
function create_folders($dir) {
return is_dir($dir) || (create_folders(dirname($dir)) && mkdir($dir, 0777));
}
優點:利用邏輯運算子短路特性,代碼極度精簡,邏輯清晰——先確保父目錄存在,再建立當前目錄。
| 函數 | 功能 | 適用版本 |
|---|---|---|
| mkdir() | 建立單層目錄 | 所有版本 |
| mkdir(..., true) | 遞歸建立多層目錄 | PHP 5.0+ |
| mkdirs() | 自訂遞歸建立 | PHP 4/5 通用 |
| create_folders() | 精簡遞歸建立 | PHP 4/5 通用 |
recursive 參數create_folders()