删除目录
-
rmdir()
只能删除空目录,(先将目录置空,然后再删除目录)- 打开目录
- 读取目录
- 如果读取不到内容,则目录可以直接删除
- 如果读取到的内容是普通文件,
unlinke
删除 - 如果是目录则继续检查
递归
- 具有相同的逻辑
- 具有明确的结束条件
while ($byte>1024){ $byte/=1024; $n++; }
function removeDirectory($dir)
{
if (is_dir($dir)) {
// 删除目录
// 先将$dir清空,然后再删除
// 1.清空目录
// 1.1 打开目录
$handler = opendir($dir);
// 1.2 读取目录
while (($item = readdir($handler)) !== false) {
if ($item != "." && $item != '..') {
//如果读取到的内容是普通文件则直接删除
//注意:判断文件时,先给出正确的路径
$sub = $dir . DIRECTORY_SEPARATOR . $item;
echo $sub,"<hr>";
//a.txt 找不到(非法路径)
//a/a.txt 能找到(有效路径)
if (is_file($sub)) {
unlink($sub);
}
//如果读取到的内容是目录则继续检查...
if (is_dir($sub)) {
//先要清空b目录,然后才能删除
//1.打开b路径
//2.读取b目录
//2.1如果读取到普通文件则直接删除
//2.2如果读取到目录则继续检查...
//2.2.1打开
//2.2.2读取目录
//2.2.3关闭目录
//3.关闭b目录
removeDirectory($sub);
}
}
}
// 1.3 关闭目录
closedir($handler);
// 2.删除目录
rmdir($dir);
}
if (is_file($dir)) {
unlink($dir);
// 删除普通文件
}
}
$dir='a';
removeDirectory($dir);
递归复制目录
将a目录树复制为aa 目录
- 读取目录内容
- 给出正确的路径
- 执行函数
//递归复制目录
/**
* 思路:
* -a
* --b
* ---b.txt
* --a.txt
*
* a=>aa
* -aa
* ---a.txt
*
* 普通文件直接使用copy($src,$dst)
* 目录文件:
* 1.目录不存在,则直接创建目录mkdir('aa');
* 2.复制目录下的普通文件 a/a.txt 复制到 aa/a.txt
* 3.复制目录下的子目录 a/b 复制到 aa/b mkdir('aa/b');
* ....(一样的逻辑用递归)
* @param string $src_dir 原始目录
* @param string $dst_dir 目标目录
*/
function copyDirectory($src_dir, $dst_dir)
{
if (!file_exists($src_dir)) {
echo "原始目录不存在";
exit;
}
if (!file_exists($dst_dir)) {
mkdir($dst_dir);
}
//把原始目录下面的内容,复制到目标目录中
//首先要查看原始目录中的内容
//1.打开原始目录
$handler = opendir($src_dir);
//2.读取原始目录
while (($item = readdir($handler)) !== false) {
if ($item != "." && $item != "..") {
//a.txt 转换成 a/a.txt 有效路径
$source = $src_dir . DIRECTORY_SEPARATOR . $item;
//目标路径:aa/a.txt
$dest = $dst_dir . DIRECTORY_SEPARATOR . $item;
//普通文件直接copy
if (is_file($source)) {
//copy("a/a.txt","aa/a.txt");
copy($source, $dest);
}
//目录文件继续检查...
if (is_dir($source)) {
//$source="a/b";
//$dest ="aa/b";
//如果目标目录不存在,则创建目标目录
// if (!file_exists($dest)) {
// //mkdir("aa/b")
// mkdir($dest);
// }
//将原始($source)目录树复制到目标($dest)目录树
//a/b/*复制到aa/b/*
//1.打开 $source a/b
//2.读取 $source a/b
//a/b/b.txt
//2.1如果读到的内容是普通文件则,直接复制
//2.2如果读到的内容是目录,则继续检查...
//3.关闭 $source a/b
//a/b 复制成aa/b
copyDirectory($source,$dest);
}
}
}
//3.关闭原始目录
closedir($handler);
}
$src_dir=__DIR__."/a";
$dst_dir=__DIR__."/aa";
copyDirectory($src_dir,$dst_dir);