用mkdir创建带日期的动态目录需先用date()生成日期字符串(如Y-m-d或Ymd),再拼接路径;确保父目录存在、权限合理(如0755),并启用递归创建(true)以支持多级目录,同时校验路径安全与写权限。

用 mkdir 创建带日期的动态目录,核心是把当前日期(如 2024-05-20 或 20240520)拼进路径,再调用 mkdir() 创建。注意权限、父目录是否存在、是否递归创建等细节。
生成日期格式的目录名
PHP 提供 date() 函数灵活生成日期字符串:
-
date('Y-m-d')→"2024-05-20"(推荐,可读性强) -
date('Ymd')→"20240520"(简洁,适合文件系统排序) -
date('Y/m/d')→"2024/05/20"(会创建多级子目录)
创建单层日期目录(如 uploads/2024-05-20)
确保父目录存在,设置合理权限(如 0755),并检查是否成功:
$baseDir = 'uploads';
$today = date('Y-m-d');
$targetDir = $baseDir . '/' . $today;
if (!is_dir($baseDir)) {
mkdir($baseDir, 0755, true); // 先确保父目录存在
}
if (!is_dir($targetDir)) {
if (mkdir($targetDir, 0755)) {
echo "目录创建成功:$targetDir";
} else {
echo "创建失败,请检查权限或路径";
}
}
直接创建多级日期目录(如 uploads/2024/05/20)
用 date('Y/m/d') 配合 mkdir(..., ..., true) 一次性递归创建:
$base = 'uploads';
$dirPath = $base . '/' . date('Y/m/d'); // 如 uploads/2024/05/20
if (mkdir($dirPath, 0755, true)) {
echo "已创建:$dirPath";
} else {
echo "创建失败:$dirPath";
}
⚠️ 注意:mkdir 第三个参数设为 true 才支持递归创建不存在的上级目录;权限 0755 是常用值,生产环境建议根据实际需求调整(如不开放写权限给组/其他用户)。
更健壮的写法(含错误处理和路径安全)
避免路径遍历风险,规范拼接,捕获可能的失败原因:
$baseDir = realpath('uploads'); // 获取绝对路径,防止 ../ 攻击
if (!$baseDir || !is_writable($baseDir)) {
die('基础目录不可写或不存在');
}
$todayDir = date('Y-m-d');
$newDir = $baseDir . DIRECTORY_SEPARATOR . $todayDir;
if (!is_dir($newDir)) {
$result = mkdir($newDir, 0755);
if (!$result) {
error_log('mkdir failed: ' . $newDir . ', error: ' . error_get_last()['message']);
die('目录创建失败');
}
}
这样既清晰又兼顾安全性与可维护性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











