在開發 PHP 應用程式時,經常需要在指定路徑下建立目錄結構。本文介紹一個支援多平台(Windows、Linux 等)的目錄建立函數,並示範如何在子目錄中自動生成設定檔。
get_dir_name() 函數接受兩個參數:$dir_path(掃描的根目錄路徑)與 $file(要在各子目錄建立的檔案名稱)。函數會遍歷指定目錄下的所有子目錄,並在每個子目錄中建立指定檔案(若不存在),最後回傳子目錄名稱陣列。
function get_dir_name($dir_path, $file) { $dirpath = $dir_path; $dir = scandir($dirpath); $arr = []; foreach ($dir as $key => $value) { // 過濾掉 . 和 .. 並確認是目錄 if (is_dir($dirpath . '/' . $value) && $value != '.' && $value != '..') { $target_file = $dirpath . '/' . $value . '/' . $file; // 若檔案不存在則建立,使用 xb+ 模式確保跨平台相容性 if (!file_exists($target_file)) { $fo = fopen($target_file, 'xb+'); // 注意:Windows 下建議使用 xb+,避免 w+ 在某些情況下失敗 chmod($target_file, 0777); fwrite($fo, 'i is a zongzi ,here is config file!') or die('配置文件創建失敗!請檢查是否有此目錄和文件的操作權限!'); fclose($fo); } $arr[] = $value; } } return $arr; }
xb+ 模式開啟檔案,在 Windows 與 Linux 上均能正常建立新檔案,避免 w+ 在 Windows 上可能出現的問題。chmod($target_file, 0777) 確保檔案可讀寫,實際部署時請依伺服器安全策略調整權限。fwrite() 失敗時會輸出錯誤訊息並終止腳本,建議正式環境改為拋出例外或記錄日誌。$subdirs = get_dir_name('/var/www/html/projects', 'config.php');
print_r($subdirs);
// 輸出:Array ( [0] => project1 [1] => project2 ... )
此函數適用於需要批量初始化專案目錄結構的場景,例如自動部署腳本、多租戶系統初始化等。