1.安装ssh2扩展 

(1)window

. 下载 php extension ssh2
下载地址 http://windows.php.net/downloads/pecl/releases/ssh2/0.12/
根据自己PHP的版本去下载. 解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb。
. 将 php_ssh.dll、php_ssh2.pdb 放到你的 php 扩展目录下 php/ext/ 下。
. 将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份
. php.ini中加入 extension=php_ssh2.dll
. 重启服务器,即可使用php执行ssh连接操作了。
查看phpinfo(),是否有显示php_ssh2扩展加载成功。

(2)linux

在linux下需要先安装扩展所需的依赖库
.安装libssh2
wget http://www.libssh2.org/download/libssh2-1.7..tar.gz
tar zxf libssh2-1.7..tar.gz
cd libssh2-1.7.
./configure --prefix=/usr/local/libssh2
make && make install
.安装ssh2
wget http://pecl.php.net/get/ssh2-0.12.tgz
tar -zxvf ssh2-0.12.tgz
cd ssh2-0.12
phpize
./configure --prefix=/usr/local/ssh2 --with-ssh2=/usr/local/libssh2
make
#执行完以上过程后,在当前目录下的modules目录下会生成一个ssh2.so文件,这就是扩展PHP所需要的,将该文件拷贝到PHP库的存储目录下在修改PHP的配置文件即可。
cp modules/ssh2.so /usr/local/php/lib/php/extensions/no-debug-non-zts-/
#注:PHP库的存储目录可能不同
vim /usr/local/php/lib/php.ini
添加extension=ssh2.so
#重启php
php -m |grep ssh #可查看是否安装成功

2.ssh2扩展与svn钩子结合,实现文件文件夹的增删改

(1)创建如下目录

file存放源码(第一次需要co代码,之后再改用up)

key存放密钥

log存放错误信息,文件更新删除记录

svn存放相关操作(https://github.com/getCodeWarehouse/php_ssh2)

(2)在svn hooks中开启钩子,调用php脚本

重要的事说三遍 要改权限~ 要改权限~要改权限~

 

svn up 状态有 U D A,使用array_pop弹出无用数据

更新和新增同为一类,需要判断是文件还是文件夹,选择不同的函数,值得注意的是ssh2_sftp_mkdir,如果远程机存在此文件夹会报错

删除文件夹之所以使用rm命令,因为ssh2_sftp_rmdir不能删除非空文件夹,又不能加参数

(3)测试提交svn

更新文件成功

如果更新速度慢,那就怪网络吧 _(┐「ε:)_

相关代码:https://github.com/getCodeWarehouse/php_ssh2

利用Php ssh2扩展实现svn自动提交到测试服务器的更多相关文章

  1. CentOS 6 用SVN自动提交文件到web服务器

    关于 svn 的安装 参考:[转]Linux(centOS6.5)下SVN的安装.配置及开机启动 经过两天的各种尝试总算解决了,总结如下: 1.在建立库时注意 要让库的名称和  要同步的 web目录名 ...

  2. 如何利用svn自动同步更新到网站服务器

    我们最终的目的是:当本地提交后,SVN服务器自动更新服务器端指定WEB目录内的文件 实现方法: 找到服务器端 SVN版本库所在的目录(目录名称是Repositories),这个目录是在安装Visual ...

  3. svn自动update到指定目录

    对于开发和测试环境来说,可以使用svn自动update 到指定目录,这样就省去每次提交代码都要去服务器上手动update.对于团队来说,省时省力. 看下怎么做吧,在服务器svnserver安装 目录下 ...

  4. 自动提交Git branch代码评审到Review Board系统

    背景 敏捷软件开发中,越小的反馈环,意味着软件质量越容易得到保证. 作为组件团队,我们的开发任务中,往往存在一些特性涉及到几十个功能点,开发周期持续数周或数月的情况.如何在开发过程中保证软件质量,是个 ...

  5. 按Enter键后Form表单自动提交的问题

    怪事年年有,今年特别多. 话说,最近项目中遇到一件怪事,当我鼠标focus在文本框中,轻轻敲了下回车键,尼玛页面突然刷新了,当时把宝宝给吓得. 接下来就是一番苦逼的烧脑和蛋疼~ 一.被表象所迷惑 突然 ...

  6. 使用RBTool自动提交code review请求

    使用RBTool自动提交code review请求 前言 让我们回想一下手工提交review请求的过程: 首先得用 svn diff > filename.diff 生成diff文件. 然后输入 ...

  7. Ajax技术--考试计时并自动提交试卷

    1.概述 在开发网络考试系统时,考试计时并自动提交试卷是必不可少的功能.由于在答卷过程中,试卷不能刷新,所以需要使用Ajax实现无刷新操作.运行本实例,访问准备考试页面index.jsp,在该页面中, ...

  8. svn自动更新服务器最新代码

    1.很简单打开dos界面 cd到svn exe目录下,运行 cd C:\Program Files\TortoiseSVN\bin    --svn安装目录(作者使用时TortoiseSVN客户端,其 ...

  9. iOS:Xcode中SVN不能提交CocoaPods中的.a文件的解决方法

    不能提交.a文件, 这个与SVN的配置有关, 其实与xcode倒没有关系. 解决方法: 1. 打开终端,  在命令行中输入: vi ~/.subversion/config  来打开配置文件.2. 然 ...

随机推荐

  1. Single Number III——LeetCode

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

  2. cf702C Cellular Network

    C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  3. G - Shuffle'm Up

    题目大意: 是一个洗牌游戏,首先给出两堆牌,s1,s2,先从s1上面拿一张牌再从s2上面拿一张牌依次往下可以洗好牌,然后把洗好的牌再分成两堆继续洗,直到这堆牌的顺序与给的顺序相同可以停止,当然如果洗不 ...

  4. Linux crontab相关

    定时自动启动任务crontab命令 文章目录 [隐藏] crontab简介 crontab用法 crontab例子 每个操作系统都有它的自动定时启动程序的功能,Windows有它的任务计划,而Linu ...

  5. 关于 Head First SQL 中文版

    我想谈谈 我对于Head  First  SQL  中文版的一些看法 事实上关于我翻译的这个Head  First  SQL 中文版..我自觉得:的确翻译得非常烂.. 和翻译Head  First  ...

  6. BAT染指影视制作 欲全面撬开互联网粉丝经济

    预測: 或靠"用户"模式盈利 除了内容制作,电影发行也在遭遇互联网模式的冲击. 除了给片方支付高额保底以外,随着市场竞争激烈.新进入者都在争夺好片的发行权. 业内预測.再往后,发行 ...

  7. UIDevice 系统信息详解

    获取当前设备    //获取当前设备    UIDevice *dev = [UIDevice currentDevice]; 设备和系统基本信息    NSLog(@"设备名称:%@&qu ...

  8. 线程、委托、lambda运算符的简单示例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. java.lang.ClassCastException

    是指类型转换出错 当前者的域小于后者的时候出现 譬如说:前者A是子类的对象,而后者B是父类的对象 若使用A = B;就会抛出java.lang.ClassCastException List<C ...

  10. Mock和injectMocks的区别

    @Mock private ForeCatalogManageServiceImpl foreCatalogManageServiceImpl; 如果是上面的写法,那么 红框方法里面的代码不会执行,这 ...