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

PHP 以日期時間戳命名目錄並自動創建的最佳實踐

     編輯:PHP 相關知識

應用場景

日誌分割、上傳文件按日期存放、定時任務產出報表等場景,常需按天創建獨立目錄。

核心代碼

<?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}";

關鍵點解析

  1. date('Ymd'):緊湊日期格式,按字典序即時間序,便於排序清理。
  2. mkdir 第三參數 true:啟用遞歸創建,父目錄不存在時自動創建。
  3. 權限 0777:配合系統 umask(通常 0022)實際為 0755,滿足 Web 服務器讀寫需求。
  4. 異常處理:生產環境務必捕獲失敗,記錄日誌並回滾業務邏輯。

進階:按小時/分鐘細分

$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}");
            }
        }
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved