关于文件的递归删除目录:注意理清楚各个路径的使用即可
函数
<?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);
}