通过php来执行svn的update操作

用PHP完成SVN的update操作

直接上代码:

error_reporting(E_ALL);
$handle = popen('.UTF-8 svn update  --username dev-tester --password tester123  --config-dir /home/wwwroot/.subversion  /home/wwwroot/yiidemo/ 2>&1','r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);

遇到的问题:

1./dev/null/.subversion/servers Not a directory

svn: Can't open file '/dev/null/.subversion/servers': Not a directory

因为通过php执行,肯定是nginx或者apache的www用户组 ,查看etc/passwd,修改www用户的家目录和shell为自己的svn的配置目录subversion/servers,例如

www:x:1000:1000:/home/wwwrooot:/bin/bash

修改services文件

注:services文件是svn用户组的配置文件,不是svn仓库里面的services文件,

#目录位置一般在:/home/wwwroot/.subversion/services
[global]
store-passwords = yes
store-plaintext-passwords = no

还要必须在popen()方法带这个参数:

 --config-dir /home/wwwroot/.subversion

2.Can’t open file ‘.svn/lock’: Permission denied

   这个问题原因是因为第一次checkout的时候是用root,使得其他用户没有权限

两个解决办法:

       一.把.svn的属主、组修改给用户,(su www ,   svn co svn://127.0.0.1/svnadmin/yiidemo --username dev-lin --password yiidemo123)

       二.给目录加权限,www权限

3.在shell命令 su切换www用户出现This account is currently not available

这个是因为 www用户shell权限问题,查看命令:

 cat /etc/passwd | grep www

修改:'/sbin/nologin',为'/bin/bash'

4.编码问题:update Error converting entry in directory  ...  to UTF-8

解决办法:在popen()方法添加参数:

LANG=en_US.UTF-8



你可能感兴趣的:(通过php来执行svn的update操作)