使用方法:
<?php require 'SimFileSync.class.php'; // 新建实例 $sync = new SimFileSync(); $src = "F:/www/simphp"; $dest = "F:/www/simphp_sae"; // 设置排除文件夹和文件名 $sync->set('exclude_dir_array', array( '.svn', '.settings' ))->set('exclude_file_array', array( '.project', '.buildpath' )); // 同步 $sync->sync($src, $dest); // 返回同步列表 print_r($sync->getSync());
同步类
<?php /** * Sim, Simple library simplify our PHP development. * 使用简单、简洁的类库,简化我们的PHP开发。 * * @author 雨中歌者 http://weibo.com/esinger (新浪微博) * @link http://blog.csdn.net/esinger (技术博客) * @license http://www.apache.org/licenses/LICENSE-2.0 */ /** * 文件同步类 * 主要功能: * 1.把源文件夹内所有文件和子文件夹同步到目标文件夹 * 2.可以同步到多个文件夹 * 3.可以设置同步规则(正则或者数组),指定哪些文件和文件夹不进行同步 * 4.返回源文件夹、目标文件夹列表 * 5.返回同步的文件列表 * * @author 雨中歌者 * @version 1.0 */ class SimFileSync { /** * 初始配置值 * * @var array */ private $ini = array( 'exclude_dir_pattern' => '', 'exclude_file_pattern' => '', 'exclude_dir_array' => array(), 'exclude_file_array' => array() ); /** * 源目录名 * * @var string */ private $src; /** * 目标目录名 * * @var string */ private $dest; /** * 源目录数据 * * @var array */ private $src_data = array(); /** * 文件同步情况 * * @var array */ private $sync = array(); /** * 构造函数 */ public function __construct() { } /** * 设置参数 * 1.$name为string,参数键名,$value为参数值,如 set('name','value') * 2.$name为array,参数键值对数组,如 set(array('name'=>'value')) * * @access public * @param string|array $name 参数键名或键值对数组 * @param mixed|null $value 参数值 * @return SimFileSync */ public function set($name, $value = null) { if (is_array($name)) { $this->ini = array_merge($this->ini, $name); } elseif (is_string($name)) { $this->ini[$name] = $value; } return $this; } /** * 同步 * * @access public * @param string $src 源文件目录 * @param string $dest 目标文件目录 * @return array */ public function sync($src, $dest) { $this->src = rtrim($src, '/\\') . '/'; $this->dest = rtrim($dest, '/\\') . '/'; $this->src_data = $this->getFile($src); foreach ($this->src_data as $file => $type) { $dest = str_replace($this->src, $this->dest, $file); if ($type == 'dir' && !is_dir($dest)) { // 目录不存在,创建目录 mkdir($dest, 0777, true); $this->sync[$file] = 'mkdir'; } elseif ($type == 'file') { if (!is_file($dest)) { // 目标文件不存在,复制文件 $dir = dirname($dest); is_dir($dir) or mkdir($dir, 0777, true); copy($file, $dest); $this->sync[$file] = 'newfile'; } else { if (md5_file($file) != md5_file($dest)) { // 目标文件存在,但修改时间不一样,覆盖文件 copy($file, $dest); $this->sync[$file] = 'rewrite'; } } } } } /** * 返回同步的文件列表 * * @access public * @return array */ public function getSync() { return $this->sync; } /** * 获取目录下的所有目录和文件 * * @access public * @param string $dirname * @return array 不是目录或目录打开失败返回空数组 */ public function getFile($dirname) { $dirname = rtrim($dirname, '/\\'); $ret = array(); if (is_dir($dirname)) { if (($dh = @opendir($dirname)) !== false) { while (false !== ($file = readdir($dh))) { if ($file != "." && $file != "..") { $path = $dirname . '/' . $file; if (is_dir($path)) { if (!$this->isExcluded($path, 'dir')) { $ret[$path] = 'dir'; $ret = array_merge($ret, $this->getFile($path)); } } else { if (!$this->isExcluded($path, 'file')) { $ret[$path] = 'file'; } } } } closedir($dh); } } return $ret; } /** * 是否被排除文件 * * @access private * @param string $filename 文件名 * @param boolean $type 目录或者文件(dir|file) * @return boolean */ private function isExcluded($filename, $type) { $filename = basename($filename); $pattern = $this->ini["exclude_{$type}_pattern"]; $array = $this->ini["exclude_{$type}_array"]; if ((!empty($pattern) && preg_match($pattern, $filename)) || in_array($filename, $array)) { return true; } return false; } /** * * 析构函数 */ public function __destruct() { unset($this->ini); } } // End of file SimFileSync.class.php
相关推荐
整理了一些PHP的类,希望能对大家有所帮助 activeCodeObj.class.php ascii.class.php book.class.php cache2.class.php database.class.php file_dir.class.php . . . . . .
DB.class.php mysql 连接数据库代码DB.class.php mysql 连接数据库代码DB.class.php mysql 连接数据库代码
SoapDiscovery.class.php
很牛叉的文件上传类class.upload.php很牛叉的文件上传类class.upload.php
java反编译工具(.class文件反编译成.java文件) 解压后点击exe文件打开工具,点击open菜单选择.class文件执行后即生成.java文件 一直在使用的,方便,系统维护必不可少
学无止境,学会整理我们经常使用的学习类库文件,加油!
email.class PHP邮箱类,用来进行邮箱校验、注册等。一个PHP类文件。email.class PHP邮箱类,用来进行邮箱校验、注册等。一个PHP类文件。
数据库类,mysql.class.php
将.class文件反编译为.java文件,可以实现将别人的文件反编译后查看里面的代码。
SqlHelper.class.php MyMiniSmarty.class.php emManage.php FenyePage.class.php Emp.class.php EmpModel.class.php Message.class.php Message.class.php MessageModel.class.php ............... 由于我...
Snoopy.class.php类及中文说明
韩顺平老师讲Smarty知识时的SqlHelper.class.php 目前较全的SqlHelper.class.php
把.class文件编译成.java文件 打开xjad软件把.class文件直接拖进来,就可以编译成java源码了
主要介绍了thinkphp文件处理类Dir.class.php的用法,以实例形式分析了基于文件处理类Dir.class.php的自定义函数del的使用,是非常实用的技巧,需要的朋友可以参考下
WxpayController.class.php WxpayController.class.php WxpayController.class.php
包含完整的SoapDiscovery.class.php类 还包含一个写好的完整的php webservice 实例
UploadFile.class.php支持多文件上传的上传类 说明:支持多文件上传的上传类 使用方法: include '../UploadFile.class.php'; $upload=new UploadFile(); if(!$upload->upload()) { // 上传错误提示错误信息 $...
wechat.class.php 微信例子wechat.class.php 微信例子wechat.class.php 微信例子