php只有复制文件函数copy()。闲来无事用递归写了一个复制目录的递归函数来练练手,还花了我不少的时间。看来还是得勤练习多思考。
/*
复制当前目录下所有的文件去目标文件夹
$cpath 当前目录
$dpath 目标目录
$type all复制当前所有文件去目标目录,dir复制所有文件至同一目录
$i 用来统计数量总
*/
function copydir_user($cpath,$dpath,&$i,$type='all'){
if($i == 0){
if(!($cpath = judge_dir($cpath,true))){
return false;
}
$dpath = judge_dir($dpath,false);
}
$handle = opendir($cpath);
while (false !== ($file = readdir($handle))) {
if($file!='.'&&$file!='..'){
if(is_dir($cpath.$file)){
$scpath = $cpath.$file.'/';
$sdpath = $dpath;
if($type == 'dir'){
$sdpath = $dpath.$file.'/';
$sdpath = judge_dir($sdpath,false);
}
copydir_user($scpath,$sdpath,$i,$type);
}else{
$current = $cpath.$file;
$source = $dpath.$file;
copy($current,$source);
$i++;
}
}
}
}
function judge_dir($dirname,$tips=true){
if(substr($dirname,strlen($dirname)-1) != '/'){
$dirname.='/';
}
if(!file_exists($dirname)){
if($tips){
echo 'directory is not exists';
return false;
}else{
mkdir($dirname);
}
}
return $dirname;
}
$des_path='C:/Users/alex/Desktop/test';//目标目录
$cur_path = 'E:/xampp/htdocs/bbs/api'; //当前目录
$i=0;
copydir_user($cur_path,$des_path,$i,'dir');
echo $i;