PHP批量创建目录需手动实现,推荐用foreach循环逐个创建并检查是否存在,或封装为支持统计的mkdirBatch函数,注意权限设置、路径安全及跨平台兼容性。

PHP 中没有直接的 mkdir 批量创建多个目录的内置函数,但可以通过循环或递归方式轻松实现。关键在于:**确保父目录存在、处理权限和错误、避免重复创建**。
用 foreach 循环逐个创建(推荐)
适合已知完整路径列表的场景,逻辑清晰,便于控制每一步:
$dirs = [
'uploads',
'uploads/images',
'uploads/files',
'logs',
'cache/templates'
];
foreach ($dirs as $dir) {
if (!is_dir($dir)) {
// 递归创建(true 表示允许创建多级),0755 是常用权限
if (!mkdir($dir, 0755, true)) {
echo "创建失败:$dir\n";
} else {
echo "已创建:$dir\n";
}
} else {
echo "已存在:$dir\n";
}
}
用 array_walk 简洁写法(一行逻辑)
适合脚本中快速批量初始化,代码更紧凑:
$dirs = ['a', 'a/b', 'a/b/c', 'temp'];
array_walk($dirs, function($dir) {
!is_dir($dir) && mkdir($dir, 0755, true);
});
封装成可复用函数
提高复用性,支持返回成功/失败统计:
function mkdirBatch(array $paths, int $mode = 0755, bool $recursive = true): array
{
$result = ['success' => [], 'failed' => []];
foreach ($paths as $path) {
if (is_dir($path)) {
$result['success'][] = $path;
continue;
}
$ok = mkdir($path, $mode, $recursive);
if ($ok) {
$result['success'][] = $path;
} else {
$result['failed'][] = $path;
}
}
return $result;
}
// 使用示例
$result = mkdirBatch(['data', 'data/config', 'data/uploads']);
print_r($result); // 查看哪些成功、哪些失败
注意权限和安全细节
Linux/macOS 下权限可能受限,Windows 对斜杠兼容性较好,但统一用 / 更稳妥:
- 权限
0755表示所有者可读写执行,组和其他人可读执行;生产环境慎用0777 - 确保运行 PHP 的用户(如 www-data、apache)对父路径有写权限
- 路径不要以
../开头,防止目录遍历风险;必要时用realpath()或basename()过滤 - 如果目录名含变量,建议用
preg_replace('/[^a-zA-Z0-9_\-\/]+/', '', $input)做基础校验
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











