## 目录处理
### 使用 opendir, readdir, closedir
*resource opendir ( string $path )*
功能: 打开一个目录句柄。
*string readdir ( resource $dir_handle )*
功能: 返回目录中下一个文件的文件名。
*void closedir ( resource $dir_handle )*
功能: 关闭目录句柄。
```
<?php
function dir_tree($dir)
{
$output = array();
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
$path = $dir . '/' . $file;
if (is_dir($path)) {
$output[$file] = dir_tree($path);
} else {
$output[] = basename($path);
}
}
}
closedir($handle);
return $output;
}
$dir = '/home/koogua/tmp';
$output = dir_tree($dir);
print_r($output);
?>
```
### 使用 dir
[Directory](http://php.net/manual/zh/class.directory.php) *dir ( string $directory )*
功能: 以面向对象的方式访问目录。
```
<?php
function dir_tree($dir)
{
$output = array();
$obj = dir($dir);
while (false !== ($file = $obj->read())) {
if ($file != '.' && $file != '..') {
$path = $dir . '/' . $file;
if (is_dir($path)) {
$output[$file] = dir_tree($path);
} else {
$output[] = basename($path);
}
}
}
$obj->close();
return $output;
}
$dir = '/home/koogua/tmp';
$output = dir_tree($dir);
print_r($output);
?>
```
### 使用 scandir
*array scandir ( string $directory )*
功能: 列出指定路径中的文件和目录。
```
<?php
function dir_tree($dir)
{
$output = array();
$files = scandir($dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
$path = $dir . '/' . $file;
if (is_dir($path)) {
$output[$file] = dir_tree($path);
} else {
$output[] = basename($path);
}
}
}
return $output;
}
$dir = '/home/koogua/tmp';
$output = dir_tree($dir);
print_r($output);
?>
```
### 使用 mkdir, rmdir
*bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false ]] )*
功能: 尝试新建一个指定的目录。
*bool rmdir ( string $dirname )*
功能: 尝试删除所指定的目录。 该目录必须是空的,而且要有相应的权限。
```
<?php
$path = '/home/koogua/tmp/1984/03/02';
if (!mkdir($path, 0775, true)) {
echo 'make dir failed.' . PHP_EOL;
}
$path = '/home/koogua/tmp/1984/03';
if (!rmdir($path)) {
echo 'remove dir failed.' . PHP_EOL;
}
?>
```
- 基本语法
- PHP标记
- 指令分隔符
- 从HTML中分离
- 注释
- 数据类型
- 布尔值
- 整数
- 浮点数
- 字符串
- 数组
- 对象
- 资源
- 空值
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 常量
- 常量语法
- 魔术常量
- 运算符
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 递增与递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if条件结构
- switch条件结构
- while循环结构
- do-while循环结构
- for循环结构
- foreach循环结构
- 包含文件
- 函数
- 自定义函数
- 可变函数
- 匿名函数
- 递归函数
- 类与对象
- 基本概念
- 属性
- 方法
- 类常量
- 构造函数和析构函数
- 访问控制
- 继承
- 抽象类
- 接口
- Trait
- 重载
- 对象遍历
- 魔术方法
- Final关键字
- 命名空间
- 自动加载
- 错误处理
- 错误显示
- 错误日志
- 错误报告
- 自定义错误处理
- 异常处理
- 异常处理机制
- 扩展异常处理类
- 字符操作
- 数组操作
- 时间操作
- 表单操作
- GET提交
- POST提交
- 文件上传
- 会话控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件属性
- 读取文件
- 写入文件
- 文件管理
- 文件锁
- 目录处理
- 路径处理
- 网络操作
- HTTP协议
- Socket操作
- CURL操作
- PDO操作
- 介绍
- 连接管理
- 预处理语句
- 事务处理
- 错误处理
- 图像操作
- 正则表达式
- 标准推荐
- 包管理器
- 设计模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御