## 目錄處理
### 使用 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防御