<?php $remote_addr = 'xx.xx.xx.xx';  //remote远程
$user_name   = 'xx';
$user_pwd    = 'xxxxxxx';
$dir_prefix  = 'E:\\mail\\'. date('Y-m-d');    //prefix前缀

recursive_mkdir($dir_prefix);              //recursive递归

$cid = ftp_connect($remote_addr) or die("Couldn't connect to server");    //建立ftp新连接
  
  if (@ftp_login($cid, $user_name, $user_pwd))
  {
  
   $filelist = filecollect($cid);                    //collect收集
   
   foreach($filelist as $remote_file)
   {
    $local_file = $dir_prefix . substr($remote_file,1);       //local_file 本地文件
echo $local_file .'<br>';
fileget($cid,$local_file,$remote_file);
}
   
  }
  
// close the connection
ftp_close($cid);  


//递归方式读取目录中的文件
function filecollect($cid,$dir='.') 
{
static $flist=array();
if ($files = ftp_nlist($cid,$dir))    //ftp_nlist返回给定目录的文件列表(ftp连接标识符,检查目录)
{
foreach ($files as $file) 
{
if (ftp_size($cid, $file) == "-1")
{
filecollect($cid,$file);

else
{
$flist[] = $file;
}
}
}
return $flist;
}

//创建目录并下载文件
function fileget($cid,$local_file, $server_file) 
{   
//目录不存在就创建 
if (!file_exists (dirname($local_file))) 

if (!@mkdir (dirname($local_file), 0777)) 

die($local_file."目录创建失败!"); 

}     

if (ftp_get($cid, $local_file, $server_file, FTP_BINARY)) 
{
echo "传输成功\n";

else 
{
echo "传输失败\n";
}
 //chmod($local_file,0666);
}

function recursive_mkdir( $folder )
{
$folder = explode( DIRECTORY_SEPARATOR , $folder );
$mkfolder = '';
for(  $i=0 ; isset( $folder[$i] ) ; $i++ )
   {
   $mkfolder .= $folder[$i];
   if( !is_dir( $mkfolder ) )
   mkdir( "$mkfolder" ,  0777,true);
   $mkfolder .= DIRECTORY_SEPARATOR;
   }
} ?> 远程服务器ftp的根目录下有11个文件夹大概,下载后只有7个,请问是什么原因导致呢?
最开始有一个php反应时间的秒数我给改成了3600
有时就能完整下载,不知有函数或者.ini文件里面控制下载文件大小或者数量么?

解决方案 »

  1.   

    现在个人感觉是在读取目录的时候,没有能全部存储下来。。纠结中,刚刚文件夹目录都读到了,但是里面的东西丢了好多
    报错误是Transfer OK  转移成功,但是为什么算是错误呢?
    例如Warning: ftp_get() [function.ftp-get]: Transfer OK in D:\wamp\www\mail_bak.php on line 63
    传输失败 E:\mail\2011-09-08/zhongxu/Sent/1315191073.4457.541024,S=513590.0.S