+ -
当前位置:首页 → 问答吧 → ftp远程下载文件 丢文件

ftp远程下载文件 丢文件

时间:2011-09-08

来源:互联网

PHP code

<?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文件里面控制下载文件大小或者数量么?

作者: xiaozhumt   发布时间: 2011-09-08

现在个人感觉是在读取目录的时候,没有能全部存储下来。。纠结中,刚刚文件夹目录都读到了,但是里面的东西丢了好多
报错误是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

作者: xiaozhumt   发布时间: 2011-09-08

相关阅读 更多