目录树示例 (directory_tree.txt
)
- project/
- src/
- Core/
- Application.php
- Router.php
- Controllers/
- HomeController.php
- UserController.php
- Models/
- User.php
- Product.php
- Views/
- home/
- index.php
- user/
- profile.php
- tests/
- unit/
- Core/
- ApplicationTest.php
- RouterTest.php
- Controllers/
- HomeControllerTest.php
- UserControllerTest.php
- integration/
- ApiTests/
- UserApiTest.php
- public/
- index.php
- assets/
- css/
- styles.css
- js/
- scripts.js
- images/
- logo.png
- config/
- database.php
- app.php
- vendor/
- logs/
- app.log
- README.md
- composer.json
- LICENSE
目录树说明
project/
项目根目录。-
src/
源代码目录,包含核心代码、控制器、模型和视图。-
Core/
核心框架类,如Application.php
和Router.php
。 -
Controllers/
控制器类,如HomeController.php
和UserController.php
。 -
Models/
模型类,如User.php
和Product.php
。 -
Views/
视图文件,按功能分类存放。
-
-
tests/
测试目录,包含单元测试和集成测试。-
unit/
单元测试,按模块分类。 -
integration/
集成测试,如 API 测试。
-
-
public/
公共资源目录,存放可通过 Web 访问的文件。-
index.php
入口文件。 -
assets/
静态资源文件,如 CSS、JavaScript 和图片。
-
config/
配置文件目录,存放数据库配置和应用配置。vendor/
Composer 依赖目录(通常不需要手动创建)。logs/
日志文件目录,存放应用日志。README.md
项目说明文档。composer.json
Composer 配置文件。LICENSE
开源许可证文件。
使用 PHP 代码解析目录树
将上述目录树保存为 directory_tree.txt
,然后运行以下 PHP 代码:
<?php
/**
* 递归删除目录及其内容
*
* @param string $dir 要删除的目录路径
*/
function deleteDirectory(string $dir): void
{
if (!is_dir($dir)) {
return;
}
$items = scandir($dir);
foreach ($items as $item) {
if ($item === '.' || $item === '..') {
continue;
}
$path = $dir . DIRECTORY_SEPARATOR . $item;
if (is_dir($path)) {
// 递归删除子目录
deleteDirectory($path);
} else {
// 删除文件
unlink($path);
echo "删除文件:$path\n";
}
}
// 删除空目录
rmdir($dir);
echo "删除目录:$dir\n";
}
/**
* 解析目录树文件并创建对应的文件和目录
*
* @param string $inputFile 包含目录树结构的文件路径
* @param string $baseDir 基础目录(生成的文件和目录将创建在此目录下)
*/
function createDirectoryTreeFromFile(string $inputFile, string $baseDir): void
{
if (!file_exists($inputFile)) {
die("输入文件不存在:$inputFile\n");
}
// 读取文件内容
$lines = file($inputFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (empty($lines)) {
die("文件内容为空\n");
}
// 如果基础目录存在,先删除其内容
if (is_dir($baseDir)) {
echo "清理基础目录:$baseDir\n";
deleteDirectory($baseDir);
}
// 重新创建基础目录
mkdir($baseDir, 0755, true);
// 用于跟踪当前嵌套目录
$currentDepth = 0;
$currentPath = [$baseDir]; // 当前路径栈
foreach ($lines as $line) {
// 计算缩进级别
$indentLevel = strlen($line) - strlen(ltrim($line));
$depth = intval($indentLevel / 4); // 假设每级缩进为 4 个空格
// 调整当前路径栈
while ($depth < $currentDepth) {
array_pop($currentPath);
$currentDepth--;
}
// 去除行首的缩进和列表标记
$line = trim($line, " -\t\n\r\0\x0B");
// 判断是否是目录
if (substr($line, -1) === '/') {
// 创建目录
$dirName = rtrim($line, '/');
$dirPath = implode(DIRECTORY_SEPARATOR, $currentPath) . DIRECTORY_SEPARATOR . $dirName;
if (!is_dir($dirPath)) {
mkdir($dirPath, 0755, true);
echo "创建目录:$dirPath\n";
}
// 更新当前路径栈
$currentPath[] = $dirName;
$currentDepth++;
} else {
// 创建文件
$filePath = implode(DIRECTORY_SEPARATOR, $currentPath) . DIRECTORY_SEPARATOR . $line;
if (!file_exists($filePath)) {
touch($filePath);
echo "创建文件:$filePath\n";
}
}
}
}
// 示例用法
$inputFile = __DIR__ . '/directory_tree.txt'; // 包含目录树结构的文件
$baseDir = __DIR__ . '/project'; // 基础目录(生成的文件和目录将创建在此目录下)
createDirectoryTreeFromFile($inputFile, $baseDir);
运行结果
运行代码后,会在 project
目录下生成以下文件和目录:
project/
├── src/
│ ├── Core/
│ │ ├── Application.php
│ │ └── Router.php
│ ├── Controllers/
│ │ ├── HomeController.php
│ │ └── UserController.php
│ ├── Models/
│ │ ├── User.php
│ │ └── Product.php
│ └── Views/
│ ├── home/
│ │ └── index.php
│ └── user/
│ └── profile.php
├── tests/
│ ├── unit/
│ │ ├── Core/
│ │ │ ├── ApplicationTest.php
│ │ │ └── RouterTest.php
│ │ └── Controllers/
│ │ ├── HomeControllerTest.php
│ │ └── UserControllerTest.php
│ └── integration/
│ └── ApiTests/
│ └── UserApiTest.php
├── public/
│ ├── index.php
│ └── assets/
│ ├── css/
│ │ └── styles.css
│ ├── js/
│ │ └── scripts.js
│ └── images/
│ └── logo.png
├── config/
│ ├── database.php
│ └── app.php
├── vendor/
├── logs/
│ └── app.log
├── README.md
├── composer.json
└── LICENSE
注意事项
-
缩进格式
- 确保
directory_tree.txt
中的缩进格式一致(例如每级缩进为 4 个空格)。
- 确保
-
文件内容
- 生成的文件是空文件。如果需要初始化文件内容,可以在
touch
后使用file_put_contents
写入内容。
- 生成的文件是空文件。如果需要初始化文件内容,可以在
-
权限问题
- 确保 PHP 脚本有权限创建目录和文件。