日誌分割、上傳文件按日期存放、定時任務產出報表等場景,常需按天創建獨立目錄。
<?php
// 獲取當前日期,格式:20240520
$dateDir = date('Ymd');
// 目標路徑:./20240520/
$targetDir = __DIR__ . '/' . $dateDir . '/';
// 避免競爭條件:使用 @ 抑制錯誤,配合 is_dir 判斷
if (!is_dir($targetDir)) {
// 0777 權限受 umask 影響,實際權限為 0777 & ~umask
// 遞歸創建支援多級目錄
if (!mkdir($targetDir, 0777, true)) {
throw new RuntimeException("無法創建目錄: {$targetDir}");
}
}
echo "目錄就緒: {$targetDir}";
$dateDir = date('Ymd/H'); // 20240520/14
$dateDir = date('Ymd/Hi'); // 20240520/1430
高併發寫入時可減少單目錄文件數,提升文件系統性能。
// 刪除 30 天前的目錄
$expireDays = 30;
$basePath = __DIR__;
foreach (new DirectoryIterator($basePath) as $fileInfo) {
if ($fileInfo->isDir() && !$fileInfo->isDot()) {
$dirName = $fileInfo->getFilename();
if (preg_match('/^\d{8}$/', $dirName)) {
$dirTime = strtotime($dirName);
if (time() - $dirTime > $expireDays * 86400) {
// 遞歸刪除目錄樹
array_map('unlink', glob("{$basePath}/{$dirName}/*.*"));
rmdir("{$basePath}/{$dirName}");
}
}
}
}