开发了一个简单的项目文档管理系统,方便管理项目中的文档。
需要php将提交的文档同步到svn库中,于是把add命令,commit写入到一个shell中,然后php执行shell
没想象的那么容易,遇到了几个坑
1 add命令容易出现重复添加的错误,比较好的执行是
svn st | grep ^? | awk '{print $2}' | xargs svn add
2 因为需要php操作svn ,所以要把项目文件所属的组改为apache用户和其所在的组
sudo chown -R apache用户名 myproject
sudo chgrp -R apache所在的组 myproject
http://blog.csdn.net/liruxing1715/article/details/39205415这篇文章介绍如何查看apache所在的用户和组
3 php执行shell的方式有三种分别是system() exec() passthru()
我刚开始使用system() 这个真是个大坑,执行shell时,只执行第一条svn add死活执行不了svn commit ,我后来把svn add 和svn commit 放入两个shell中,调用两次system才成功。后来我想到exec,是试了试,exec可以完美执行一个shell,所以就使用exec执行了
4 我另一个功能是通过php update代码到测试服务器,总是出错,后来发现应该给整个项目目录更改用户和用户组,调用chown 就可以了