同步文件PHP常用类库:文件同步类SimFileSync.class.php

摘要:
首先,我是个菜鸟。在下面的文章中,有一些误导性的技巧。我不负责以下主要功能:*1.将源文件夹中的所有文件和子文件夹同步到目标文件夹*2.同步到多个文件夹*3.设置同步规则,并指定不同步的文件和文件夹*4.返回源文件夹和目标文件夹表*5.返回同步文件表列规范用法:<?phprequire的SimFileSync.class。php';//新实例$sync=ne

首先声明,我是一个菜鸟。一下文章中出现技巧误导况情盖不负责

    主要功能:

 * 1.把源文件夹内部全文件和子文件夹同步到标目文件夹

 * 2.可以同步到多个文件夹

 * 3.可以设置同步规矩,指定哪些文件和文件夹不进行同步

 * 4.返回源文件夹、标目文件夹表列

 * 5.返回同步的文件表列

    型典用法:

<?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

文章结束给大家分享下程序员的一些笑话语录: 警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”

免责声明:文章转载自《同步文件PHP常用类库:文件同步类SimFileSync.class.php》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows待机、休眠、睡眠的区别以及程序运行策略docker odoo启动比较完整的命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

office 2016 专业版 删除部分组件

删除Office2016 Professional Edition####1中的一些组件。打开控制面板。2.单击此选项。3.找到Office2016并右键单击以选择更改。4.选择并确认。5.选择要删除的组件(以Access为例)。6.单击此处。7.单击“继续”。8.等等。9.完成此方法并不是真正删除模块。这意味着模块已禁用。如果您想在将来重新启用它,请重复前...

爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案

目前,许多网站的API接口返回的http代码返回代码为403,表示禁止访问。如果您也遇到这种情况,请不要急于首先修改网站的相关参数,即高级api的网站。使用浏览器访问。如果浏览器访问api接口,它可以成功。表示已设置权限。接口可能已被修改或无效,此时无法访问。调用此接口时,将捕获异常中的responseBody。数据很可能在该区域。这就是作者遇到的问题。直接...

Oracle 12c新特性(For DBA)

2: Oracle12cIn-MemoryOracle12cIn-Memory提供了一种独特的双格式体系结构,它可以使用传统的行格式和新的内存列格式同时在内存中存储表。与其他NOSQL分片结构相比,OracleSharding提供了优异的运行时性能和更简单的生命周期管理。OracleSharding使用GDS体系结构自动部署和管理分片和复制技术。GDS还提供...

Excel数据透视表、高级筛选

目录:1.数据透视表:数据透视表格式和操作说明:多个表一起创建数据透视表创建组创建计算字段创建计算项值显示方法切片器2。高级过滤:高级过滤和或关系精确过滤和模糊过滤通配符过滤原则查询不重复值(使用高级过滤)高级过滤区分大小写使用高级过滤查找空数据使用高级过滤查询两个表中相同的记录或未使用的记录过滤记录1和数据透视表1.正确的数据透视表格式:① 数据源的第一行...

js 浏览器窗口 刷新、关闭事件

当前页面不会直接关闭,可以点击确定按钮关闭或刷新,也可以取消关闭或刷新。...