一、前言
在 PHP 中,有时候需要将一个或多个目录以及目录下的文件复制到另一个目录中,本文将介绍如何使用递归的方式实现目录和子目录的拷贝。
二、获取需要拷贝的目录
在实现目录拷贝之前,需要先获取需要拷贝的目录,可以使用 `opendir()` 函数来打开一个目录句柄,并在循环中使用 `readdir()` 函数读取目录中的文件和子目录。代码如下:
```php
function copy_dir($source, $destination) {
if (!is_dir($destination)) {
mkdir($destination, 0777, true);
}
$dir_handle = opendir($source);
while ($entry = readdir($dir_handle)) {
if ($entry === "." || $entry === "..") {
continue;
}
$source_path = $source . DIRECTORY_SEPARATOR . $entry;
$destination_path = $destination . DIRECTORY_SEPARATOR . $entry;
if (is_dir($source_path)) {
copy_dir($source_path, $destination_path);
} else {
copy($source_path, $destination_path);
}
}
closedir($dir_handle);
}
?>
```
上述代码中,定义了一个 `copy_dir()` 函数,传入需要拷贝的源目录和目的目录,使用 `is_dir()` 函数检测是否为一个目录,如果是,则递归调用 `copy_dir()` 函数拷贝子目录和文件,否则使用 `copy()` 函数拷贝文件。
在 `if (!is_dir($destination))` 的语句中,如果目的目录不存在,则使用 `mkdir()` 函数创建一个目录,并设置权限为 0777,以便于在任何状态下都可以写入。
三、测试
测试代码如下:
```php
$source = './test';
$destination = './copy';
copy_dir($source, $destination);
?>
```
上述代码中,首先定义了需要拷贝的源目录和目的目录,然后使用 `copy_dir()` 函数拷贝目录和子目录。
四、总结
通过上述示例代码,可以实现目录和子目录的拷贝,使用递归的方式可以遍历目录和子目录,并进行拷贝操作。