文件同步类SimFileSync.class.php-阿里云开发者社区

开发者社区> 航空母舰> 正文

文件同步类SimFileSync.class.php

简介:
+关注继续查看

使用方法: 

Java代码  收藏代码
  1. <?php  
  2. require 'SimFileSync.class.php';  
  3.   
  4. // 新建实例  
  5. $sync = new SimFileSync();  
  6.   
  7. $src = "F:/www/simphp";  
  8. $dest = "F:/www/simphp_sae";  
  9.   
  10. // 设置排除文件夹和文件名  
  11. $sync->set('exclude_dir_array', array(  
  12.     '.svn',  
  13.     '.settings'  
  14. ))->set('exclude_file_array', array(  
  15.         '.project',  
  16.         '.buildpath'  
  17.     ));  
  18.   
  19. // 同步  
  20. $sync->sync($src, $dest);  
  21.   
  22. // 返回同步列表  
  23. print_r($sync->getSync());  

同步类

Java代码  收藏代码
  1. <?php  
  2. /** 
  3.  * Sim, Simple library simplify our PHP development. 
  4.  * 使用简单、简洁的类库,简化我们的PHP开发。 
  5.  * 
  6.  * @author 雨中歌者 http://weibo.com/esinger (新浪微博) 
  7.  * @link http://blog.csdn.net/esinger (技术博客) 
  8.  * @license http://www.apache.org/licenses/LICENSE-2.0 
  9.  */  
  10.   
  11. /** 
  12.  * 文件同步类 
  13.  * 主要功能: 
  14.  * 1.把源文件夹内所有文件和子文件夹同步到目标文件夹 
  15.  * 2.可以同步到多个文件夹 
  16.  * 3.可以设置同步规则(正则或者数组),指定哪些文件和文件夹不进行同步 
  17.  * 4.返回源文件夹、目标文件夹列表 
  18.  * 5.返回同步的文件列表 
  19.  * 
  20.  * @author 雨中歌者 
  21.  * @version 1.0 
  22.  */  
  23. class SimFileSync  
  24. {  
  25.     /** 
  26.      * 初始配置值 
  27.      * 
  28.      * @var array 
  29.      */  
  30.     private $ini = array(  
  31.         'exclude_dir_pattern' => '',  
  32.         'exclude_file_pattern' => '',  
  33.         'exclude_dir_array' => array(),  
  34.         'exclude_file_array' => array()  
  35.     );  
  36.   
  37.     /** 
  38.      * 源目录名 
  39.      * 
  40.      * @var string 
  41.      */  
  42.     private $src;  
  43.   
  44.     /** 
  45.      * 目标目录名 
  46.      * 
  47.      * @var string 
  48.      */  
  49.     private $dest;  
  50.   
  51.     /** 
  52.      * 源目录数据 
  53.      * 
  54.      * @var array 
  55.      */  
  56.     private $src_data = array();  
  57.   
  58.     /** 
  59.      * 文件同步情况 
  60.      * 
  61.      * @var array 
  62.      */  
  63.     private $sync = array();  
  64.   
  65.     /** 
  66.      * 构造函数 
  67.      */  
  68.     public function __construct()  
  69.     {  
  70.     }  
  71.   
  72.     /** 
  73.      * 设置参数 
  74.      * 1.$name为string,参数键名,$value为参数值,如 set('name','value') 
  75.      * 2.$name为array,参数键值对数组,如 set(array('name'=>'value')) 
  76.      * 
  77.      * @access public 
  78.      * @param string|array $name 参数键名或键值对数组 
  79.      * @param mixed|null $value 参数值 
  80.      * @return SimFileSync 
  81.      */  
  82.     public function set($name, $value = null)  
  83.     {  
  84.         if (is_array($name)) {  
  85.             $this->ini = array_merge($this->ini, $name);  
  86.         } elseif (is_string($name)) {  
  87.             $this->ini[$name] = $value;  
  88.         }  
  89.         return $this;  
  90.     }  
  91.   
  92.     /** 
  93.      * 同步 
  94.      * 
  95.      * @access public 
  96.      * @param string $src 源文件目录 
  97.      * @param string $dest 目标文件目录 
  98.      * @return array 
  99.      */  
  100.     public function sync($src, $dest)  
  101.     {  
  102.         $this->src = rtrim($src, '/\\') . '/';  
  103.         $this->dest = rtrim($dest, '/\\') . '/';  
  104.         $this->src_data = $this->getFile($src);  
  105.         foreach ($this->src_data as $file => $type) {  
  106.             $dest = str_replace($this->src, $this->dest, $file);  
  107.             if ($type == 'dir' && !is_dir($dest)) {  
  108.                 // 目录不存在,创建目录  
  109.                 mkdir($dest, 0777true);  
  110.                 $this->sync[$file] = 'mkdir';  
  111.             } elseif ($type == 'file') {  
  112.                 if (!is_file($dest)) {  
  113.                     // 目标文件不存在,复制文件  
  114.                     $dir = dirname($dest);  
  115.                     is_dir($dir) or mkdir($dir, 0777true);  
  116.                     copy($file, $dest);  
  117.                     $this->sync[$file] = 'newfile';  
  118.                 } else {  
  119.                     if (md5_file($file) != md5_file($dest)) {  
  120.                         // 目标文件存在,但修改时间不一样,覆盖文件  
  121.                         copy($file, $dest);  
  122.                         $this->sync[$file] = 'rewrite';  
  123.                     }  
  124.                 }  
  125.             }  
  126.         }  
  127.     }  
  128.   
  129.     /** 
  130.      * 返回同步的文件列表 
  131.      * 
  132.      * @access public 
  133.      * @return array 
  134.      */  
  135.     public function getSync()  
  136.     {  
  137.         return $this->sync;  
  138.     }  
  139.   
  140.     /** 
  141.      * 获取目录下的所有目录和文件 
  142.      * 
  143.      * @access public 
  144.      * @param string $dirname 
  145.      * @return array 不是目录或目录打开失败返回空数组 
  146.      */  
  147.     public function getFile($dirname)  
  148.     {  
  149.         $dirname = rtrim($dirname, '/\\');  
  150.         $ret = array();  
  151.         if (is_dir($dirname)) {  
  152.             if (($dh = @opendir($dirname)) !== false) {  
  153.                 while (false !== ($file = readdir($dh))) {  
  154.                     if ($file != "." && $file != "..") {  
  155.                         $path = $dirname . '/' . $file;  
  156.                         if (is_dir($path)) {  
  157.                             if (!$this->isExcluded($path, 'dir')) {  
  158.                                 $ret[$path] = 'dir';  
  159.                                 $ret = array_merge($ret, $this->getFile($path));  
  160.                             }  
  161.                         } else {  
  162.                             if (!$this->isExcluded($path, 'file')) {  
  163.                                 $ret[$path] = 'file';  
  164.                             }  
  165.                         }  
  166.                     }  
  167.                 }  
  168.                 closedir($dh);  
  169.             }  
  170.         }  
  171.         return $ret;  
  172.     }  
  173.   
  174.     /** 
  175.      * 是否被排除文件 
  176.      * 
  177.      * @access private 
  178.      * @param string $filename 文件名 
  179.      * @param boolean $type 目录或者文件(dir|file) 
  180.      * @return boolean 
  181.      */  
  182.     private function isExcluded($filename, $type)  
  183.     {  
  184.         $filename = basename($filename);  
  185.         $pattern = $this->ini["exclude_{$type}_pattern"];  
  186.         $array = $this->ini["exclude_{$type}_array"];  
  187.         if ((!empty($pattern) && preg_match($pattern, $filename)) || in_array($filename, $array)) {  
  188.             return true;  
  189.         }  
  190.         return false;  
  191.     }  
  192.   
  193.     /** 
  194.      * * 析构函数 
  195.      */  
  196.     public function __destruct()  
  197.     {  
  198.         unset($this->ini);  
  199.     }  
  200. }  
  201. // End of file SimFileSync.class.php  

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
美团二面 - 求数的平方根,不使用Math.sqrt
题目,给一个整数,求它的平方根,不能使用java自带的Math.sqrt(); 说来尴尬,我都不知道平方根是啥 0.0
6 0
高频面试题-请聊一下Spring中BeanFactory与FactoryBean的区别!
熟练掌握Spring,并对Spring源码有一定的见解(或者是读过Spring源码),无法避免的就是要问几个问题。IOC的实现原理是什么? AOP底层是如何实现的? 因为这些基本上都是面试必然要准备的题目,如果你能粗略的说上一些来,就可能会问一些Spring中使用到的接口,就比如今天我们要说的BeanFactory和FactoryBean有什么不一样(区别)。
8 0
Visual Studio如何导入码云项目?
Visual Studio如何导入码云项目?
6 0
idea新建项目没有Spring Initializr
idea新建项目没有Spring Initializr
6 0
mybatis的association标签传多个参数
association标签里面的column以对象的形式传过去,接收的时候把parameterType改为 其中 id 和 name 是对应你表的字段,两个 param 名字随便定义
5 0
java字符串反转(7种方法)
用stringBuffer或者stringBuilder自带的reverse方法
6 0
用Java实现一个简单二叉树
前置知识: 什么是二叉树:一个递归的树形数据结构,每个节点最多有两个子节点;二叉树一般都是二分查找树,每个节点的值大于它左子节点的值,小于它右子节点的值
7 0
重学Java(五):操作符
重学Java(五):操作符
8 0
用java实现一个简单队列
本文demo基于数组实现,主要用来帮助理解队列先进先出的特点
5 0
Java实现二分查找
描述: 给定一个排好序的数组arr和一个数字x,让你在数组中找到x的下标,如果没有就返回-1;
5 0
+关注
514
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载