+ -
当前位置:首页 → 问答吧 → 远程文件备份,程序员写的,我看不懂,不好意思问。。

远程文件备份,程序员写的,我看不懂,不好意思问。。

时间:2011-09-01

来源:互联网

PHP code

<?php

    $remote_addr = '220.xx.xx.xx';  //remote远程
    $user_name   = 'xxxx';
    $user_pwd    = 'xxxx';
    $dir_prefix  = 'F:\\mail\\'. date('Y-m-d');    //prefix前缀
    
    recursive_mkdir($dir_prefix);              //recursive递归
    
    $conn_id = ftp_connect($remote_addr) or die("Couldn't connect to server");    //建立ftp新连接
      
      if (@ftp_login($conn_id, $user_name, $user_pwd))
      {
              
           $filelist = filecollect($conn_id);                    //collect收集
           
           foreach($filelist as $remote_file)
           {
                $local_file = $dir_prefix . substr($remote_file,1);       //local_file 本地文件
                echo $local_file .'<br>';
                fileget($conn_id,$local_file,$remote_file);
            }
       
      }
      
    // close the connection
    ftp_close($conn_id);  
    
    
    //递归方式读取目录中的文件
    function filecollect($cid,$dir='.') 
    {
        static $flist=array();
        if ($files = ftp_nlist($cid,$dir))
        {
            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);
           $mkfolder .= DIRECTORY_SEPARATOR;
           }
    }    

?> 


给我的程序附带了一个.bat文件 ,触发做邮件系统备份,程序员说让我自己看,小弟实在看不懂,手里有一个红色的php和mysql开发 圣经第四版的书 ,查询无果,相应的php手册也没有查到什么 公司小,没有师傅,程序员是做后台的,所以也没有理由手把手带我,希望朋友们能帮我讲一下。。
我把程序分三段看 第一段是打开ftp连接 然后是递归读取目录 最后是下载文件
第一段中的fileget我不明白他的意思
第二段读取目录function filecollect($cid,$dir='.') dir后面的单引号中是让我填写要备份的文件以及格式么?
最后一段下载的地方 function recursive_mkdir的方法 不知道是什么作用

ps:小弟自学php大概4个月了,始终没有什么起色,加上在公司也帮忙做做别的,所以也不是很。。
感觉自学很吃力,找猫画虎,但是有的时候找不到猫,不知道如何去画,php100视频正在看,书也再看,感觉还没怎么着呢就遇到瓶颈的说。。。

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

PHP code

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


没用过FTP 的函数,不过看代码应该是这样的
用你的流程来说吧
1,首先建立 和 FTP 的通信 
2,登录FTP成功 filecollect(通信地址,文件目录位置='默认位置') 例如 wwwroot/test 目录
3,与通信地址成功连接 ftp_nlist 返回wwwroot/test 中 所有 文件 既 文件目录 地址 数组
4,例如 wwwroot/test 中有 1个文件abc.php 1个文件夹 abc. 
5,返回 wwwroot/test/abc.php 和 wwwroot/test/abc
6,foreach 循环 wwwroot/test/abc.php 和 wwwroot/test/abc 
7,ftp_size 检查 该地址是否 文件。 是则 存入 数组 $flist 中
 否则 递归循环 跳转至 第3步 并以 wwwroot/test/abc 为地址 继续循环 直到 所有文件 被找出 并储存 于 数组 $flist 中 终止递 归循环 return 数组 $flist 赋值到 $filelist 中
8,$filelist 循环所有刚刚得到的所有FTP 文件地址
9,fileget() 与通信地址成功连接
并得到 循环中的 单个地址 FTP 文件地址 $remote_file 和 需要存储到的本文件地址 $local_file
10,file_exists 检查是否有这个目录 存在。 否则 创建 并 设置权限为 0777
(在这里需要注意!应把 recursive_mkdir() 放置 if (!@mkdir (dirname($local_file), 0777)) 
下 并 参数 设置为 dirname($local_file))
11,ftp_get 将 FTP 文件 以二进制方式 下载 到 第10步 创建的文件夹 中去 ftp_get 成功返回 true 失败为 false

作者: Kogeo   发布时间: 2011-09-01

mark and study

作者: hero0524   发布时间: 2011-09-01

他给你的bat文件应该是让你做计划任务 自动执行的.具体的看看bat文件的内容.

作者: PhpNewnew   发布时间: 2011-09-01

相关阅读 更多