使用方法:
<?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
相关推荐
UploadFile.class.php支持多文件上传的上传类 说明:支持多文件上传的上传类 使用方法: include '../UploadFile.class.php'; $upload=new UploadFile(); if(!$upload->upload()) { // 上传错误提示错误信息 $...
整理了一些PHP的类,希望能对大家有所帮助 activeCodeObj.class.php ascii.class.php book.class.php cache2.class.php database.class.php file_dir.class.php . . . . . .
- 递归处理子目录:若想对整个包含多个子目录的项目进行反编译,可以使用`-r`选项,例如:`jad -r -d srctree/**/*.class`将递归地处理`tree`目录及其所有子目录下的`.class`文件,并根据类所在的包名称创建对应的...
SoapDiscovery.class.php
下面将详细介绍.class 文件反编译到.java 文件的过程,包括反编译工具的使用和反编译后的修改、再编译等步骤。 一、反编译工具的选择 在反编译.class 文件时,需要使用专门的反编译工具。目前有多种反编译工具可供...
Java反编译是将已编译的字节码(.class文件)转换回源代码(.java文件)的过程,这对于理解和学习已有的Java程序、逆向工程或调试都是很有用的。标题提到的"java反编译工具"是用于这个目的的软件,它能够帮助开发者...
《很牛叉的文件上传类class.upload.php》 在IT领域,文件上传是常见的功能需求,无论是用户在网站上提交照片、文档还是其他类型的文件,都需要处理文件上传的问题。在这个场景下,`class.upload.php`就是一个强大的...
学无止境,学会整理我们经常使用的学习类库文件,加油!
Java 类(.class)文件是Java程序编译后的二进制形式,它们包含了机器可执行的指令和数据结构。为了查看这些二进制文件中的源代码或者理解其工作原理,我们需要借助反编译工具。本资源提供的是一款名为JD-GUI的免费...
可以批量删除.class文件,点击右键操作就可以了,简单
数据库类,mysql.class.php
每个`.class`文件都是Java虚拟机(JVM)能够识别和执行的二进制格式,它包含了类、接口、字段和方法的定义,以及相关的元数据。由于`.class`文件是二进制的,所以直接阅读并不直观,这就需要反编译工具将它们转换回...
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 ............... 由于我...
在这种需求下,出现了专门用于反编译Java字节码的工具,例如XJad,它是一个古老的类反编译器,可以将`.class`文件转换回`.java`源代码格式。 首先,我们需要理解Java的编译过程。当开发者编写完`.java`源代码后,会...
在实际使用中,首先需要将Snoopy.class.php文件引入到PHP脚本中,然后创建Snoopy对象,配置相关参数,如URL、请求类型、头部信息等,最后调用相应的请求方法执行请求。获取到服务器的响应后,可以利用Snoopy提供的...
韩顺平老师讲Smarty知识时的SqlHelper.class.php 目前较全的SqlHelper.class.php
每个类定义都会对应一个`.class`文件,如果源文件中有多个public类,那么需要额外的 `-d` 参数指定输出目录,以避免文件重命名冲突。 4. **类加载器与字节码执行**: JVM使用类加载器加载`.class`文件,然后解析...
包含完整的SoapDiscovery.class.php类 还包含一个写好的完整的php webservice 实例
根据thinkphp官方分页类修改,弥补不足,优化分页逻辑,加入跳转页数,实现最具用户体验的分页类(类似discuz论坛分页)