关于文件的递归删除目录:注意理清楚各个路径的使用即可
函数
<?php
//删除目录,须知:文件dir只能删除空的,删除文件夹用:rmdir(),删除文件unlink();
//利用句柄当指针使用:readdir();
function del($path)
{
//去掉错误的路径,自己格式化一次
$path = rtrim($path,'/');
//打开句柄
$resuoce = opendir($path);
while(false !== $fileName=(readdir($resuoce))){
if($fileName=='.'||$fileName=='..')continue;
//echo $path.'/'.$fileName.'<br />';
$fileNew = $path.'/'.$fileName;
//下面的参数必须是一个完整的路径,而不是文件名
if(is_dir($fileNew)){
del($fileNew);
}else{
unlink($fileNew);
}
}
//删除空目录的顺序需要在关闭资源之后,因为:不能删除一个为关闭的资源,相当于删除一个已经打开的文件一个道理;
closedir($resuoce);//参数是被打开的资源
rmdir($path);//删除函数的参数必须是原打开的路径因为是递归遍历,而且需要删除自己打开的资源
}
// 调用
$path = './include';
del($path);
关于文件复制的递归函数:注意理清楚各个路径的使用即可
函数
<?php
/**
* 函数功能复制一个目录到指定的地方
* @param URL 需要复制的路径
* @param URL 指定存放的路径
*/
function copy_file($path,$to_path)
{
//格式化代码,按照要求防止输入参数和符合
$path= rtrim($path, '/');
$to_path= rtrim($to_path, '/');
if($path== '.' || $path== '..' || $to_path== '.' || $to_path== '..') return false;
//防止源目录不存在和目标目录存在
if(!file_exists($path) || !is_dir($path)) return false;
// if(!file_exists($src)){echo 1;}
if(!file_exists($to_path) || !is_dir($to_path)) mkdir($to_path);
//打开dir 打开句柄
$resouce = opendir($path);
//循环遍历dir
//while(false !== $dirNewName=(readdir($resouce))){
while(false !== $dirNewName=(readdir($resouce))){
//防止文件向上递归读取
if($dirNewName=='.'||$dirNewName=='..')continue;
//递归需要的路径
$new_path = $path.'/'.$dirNewName;
//复制目标需要的路径
$copy_fileN = $to_path.$new_path;
//echo $copy_fileN.'<hr />';
//递归文件夹
if(is_dir($new_path)){
// echo $new_path.'<hr />';
//复制文件夹,在递归之前执行是个逻辑顺序问题,必须要先有文件夹,下面的文件才有地方可放
mkdir($copy_fileN,0777,true);//这里使用的路径不能是自己的,要目标的;
//echo $to_path.'<hr />';
copy_file($new_path,$to_path);//第二个参数只是起到一个开头引导作用,和函数体内的拼接目录作用,所以写原来 即可;
}else{
copy($new_path,$copy_fileN);//参数一:是源目标路径,参数二:刚刚创建在指定位置的新目录路径
}
}
closedir($resouce);
}