1、php执行svn的更新命令很简单 exec();
2、难点时如何用php进程用户控制系统进程
php是以www身份做系统中运行,无对应权限;这时需要用sudo以及相关的/etc/sudoers来帮忙。
修改sudo配置文件,直接键入visudo命令编辑配置文件:
1. 注释Defaults requiretty
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
否则会出现sudo: sorry, you must have a tty to run sudo
2. 增加行 Defaults visiblepw
否则会出现 sudo: no tty present and no askpass program specified
我发现sudo-1.6.9p17-5.el5是不支持这个参数的,sudo-1.7.2p1-10.el5支持。
3.在配置文件靠近尾部的地方有一行root ALL=(ALL) ALL,紧接着这行加入
www ALL=(ALL) NOPASSWD:/usr/bin/svn *
注:NOPASSWD可以使在命令执行时不需要交互输入www 用户的密码
具体示例代码如下
exec('sudo /usr/bin/svn up /www/code --username svnuser --password ooxx 2>&1',$output, $return_val);
echo implode("
\n\r", $output),"
\n\r";
update的时候会出现Store password unencrypted,解决办法
vim ~/.subversion/servers
或者根据用户
vim /home/zhangy/.subversion/servers
找到以下内容,注释去掉并改成yes就行了
# store-plaintext-passwords = no
同样内容的行在servers文件中可能有多个,要找在[global]标签之后的行做修改
这样就实现来通过web来更新svn了