原理先下载再上传,这是FTP复制的方法。缺点:空间不给力的话,复制得会不全。
<?php
/**
* Base class for HiFTP.
*
@copyright Funch
*/
………
function GetDir($d,$tmp){
@mkdir($tmp,0777);
$this->chdir($d);
$f=$this->nlist('.');
foreach($f as $fi){
if($fi=='.' || $fi=='..') continue;
$this->isFile($fi) ? $this->get($fi,$tmp.'/'.$fi) : $this->GetDir($d.$this->sep($d).$fi,$tmp.'/'.$fi);
}
}
function copy_dir($dir,$to){
$this->GetDir($dir,($lc='cache/HiFTP-Getdir-'.uniqid()));
$this->dput($lc,$to.$this->sep($to).$this->cwork($dir));
}
function scan($temp){
$list=glob($temp.'/*');
foreach($list as $fd){
if(is_file($fd)){
$z.="8¿".$fd.PHP_EOL;
}elseif(is_dir($fd) && ($fd!=$temp.'/.') && ($fd!=$temp.'/..')){
$z.="5¿".$fd.PHP_EOL;
$z.=$this->scan($fd);
}}
return $z;
}
function dput($temp,$to){
$dd=explode(PHP_EOL,$this->scan($temp));
natsort($dd);
foreach($dd as $dz){
$dza=explode('¿',trim($dz));
$dzi=str_replace($temp.'/','',trim($dza[1]));
if(trim($dza[0])=='5'){
$this->mkdirs($this->realdir($to.$this->sep($to).$dzi));
}else{
$this->isDir($to) || $this->mkdirs($to);
$this->put("{$temp}/{$dzi}",$this->realdir($to.$this->sep($to).$dzi));
}}
return true;
}
………
错误之处请指正!