PHP封装的svn类使用内置svn函数实现根据svn版本号导出相关文件示例

本文实例讲述了PHP封装的svn类使用内置svn函数实现根据svn版本号导出相关文件分享给大家供大家参考,具体如下:

rush:PHP;"> _get_file_list($revision_array); if (!empty($filelist)) { $lbv_export = $svnPeer->_svn_export_list($filelist,'trunk889'); if (true === $lbv_export) { echo '导出成功'; } else { echo '导出失败'; } } else { echo '获取文件列表失败'; } /** * PHP操作svn类,全部利用PHP内置的svn函数 * * @author wengxianhu * @date 2013-08-05 */ class svnPeer { /* svn用户名 */ public $svn_user = 'wengxianhu'; /* svn密码 */ public $svn_password = 'wxh025'; /* 来源路径 */ public $source_path = '/var/www/trunk/'; /* 目标路径 */ public $dest_path = '/var/www/'; /** * 构造函数 * * @author wengxianhu * @date 2013-08-05 * @return void */ public function __construct () { $this->_svn_connect(); } /** * 配置SVN使用认的用户名和密码 * * @author wengxianhu * @date 2013-08-05 * @return void */ public function _svn_connect () { svn_auth_set_parameter(SVN_AUTH_ParaM_DEFAULT_USERNAME,$this->svn_user); svn_auth_set_parameter(SVN_AUTH_ParaM_DEFAULT_PASSWORD,$this->svn_password); } /** * 根据svn版本号获取所有的文件路径 * * @author wengxianhu * @date 2013-08-05 * @param array $revision_array 版本号列表 * @return array */ public function _get_file_list ($revision_array = array()) { if (!empty($revision_array)) { $filelist = array(); $log_list = array(); rsort($revision_array,SORT_NUMERIC); foreach ($revision_array as $_k=>$_v) { $log_list = @svn_log($this->source_path,$_v,$_v); if (false === $log_list) { return false; } else { $log_list = current($log_list); foreach ($log_list['paths'] as $s_k=>$s_v) { $s_v['path'] = preg_replace('/^\/[^\/]+\/(.*)$/i','$1',$s_v['path']); $filetmp = $s_v['path']; if (is_file($this->source_path . $s_v['path'])) { if (false === $this->multidimensional_search($filelist,array('filepath'=>$s_v['path']))) { $filelist[] = array( 'revision_no' => $log_list['rev'],'filepath' => $s_v['path'] ); } } } } } return $filelist; } } /** * 对多维数组进行搜索 * * @author wengxianhu * @date 2013-08-05 * @param array $parents 被搜索数组 * @param array $searched 搜索数组 * @return boolean */ public function multidimensional_search ($parents = array(),$searched = array()) { if (empty($searched) || empty($parents)) { return false; } foreach ($parents as $key => $value) { $exists = true; foreach ($searched as $skey => $svalue) { $exists = ($exists && IsSet($parents[$key][$skey]) && $parents[$key][$skey] == $svalue); } if ($exists) { return $key; } } return false; } /** * 根据svn版本号导出相应的文件 * * @author wengxianhu * @date 2013-08-05 * @param array $file_array 文件路径名 * @param string $package_name 包名 * @return boolean 成功为true,失败为false */ public function _svn_export_list ($file_array = array(),$package_name = '') { $info = true; $this->dest_path = $this->dest_path . $package_name; if (file_exists($this->dest_path)) { $this->delDirAndFile($this->dest_path); } foreach ($file_array as $_k=>$_v) { $source_files = $this->source_path . $_v['filepath']; $dest_files = $this->dest_path . '/' . $_v['filepath']; $revision_no = (int)$_v['revision_no']; $this->_mkdirm(dirname($dest_files)); $lbv_export = @svn_export($source_files,$dest_files,false,$revision_no); if (false === $lbv_export) { $info = false; break; } } return $info; } /** * 创建文件夹 * * @author wengxianhu * @date 2013-08-05 * string $path 文件路径(不包括文件名) * return void */ public function _mkdirm ($path) { if (!file_exists($path)) { $this->_mkdirm(dirname($path)); mkdir($path,0755); } } /** * 循环删除目录和文件函数 * * @author wengxianhu * @date 2013-08-15 * @param string $dirName 目录路径 * return array */ public function delDirAndFile($dirName) { if ( $handle = opendir( "$dirName" ) ) { while ( false !== ( $item = readdir( $handle ) ) ) { if ( $item != "." && $item != ".." ) { if ( is_dir( "$dirName/$item" ) ) { $this->delDirAndFile( "$dirName/$item" ); } else { unlink( "$dirName/$item" ); } } } closedir( $handle ); rmdir( $dirName ); } } }

更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《

希望本文所述对大家PHP程序设计有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用