php exec(svn commit) hangs


php exec(svn commit) hangs

我知道也有类似的问题,但它们并不能解决我的问题。。。

在从repo中签出文件夹之后(工作正常)。从jquery调用一个方法,以便在php中执行以下操作。

exec ('svn cleanup '.$checkout_dir);
session_write_close(); //Some suggestion that was supposed to help but doesn't
exec ('svn commit -m "SAVE DITAMAP" '.$file);

它们将输出以下内容:svn清理USER_WORKSPACE/0A8288svn commit-m"SAVE DITAMAP"USER_WORKSPACE/0A8288/map.DITAMAP

1) 第一行(exec('svn-cleanup')。。。执行良好。2) 一旦我调用svn-commit,我的服务器就会挂起,一切都会进入地狱

apache错误日志显示此错误:[注意]子3424:等待240秒,等待4个工作线程完成

我没有使用php_svn模块,因为我无法在windows上编译它。

有人知道这里发生了什么吗?我可以从终端窗口执行完全相同的cmd,它执行得很好。

由于我在jquery exec()上找不到任何文档,我认为这是在调用php。我从文档页面复制了这个:

从apachephp脚本中调用exec()时,请确保处理stdout、stderr和stdin(如下面的示例所示)。如果您忘记了这一点,并且您的shell命令产生输出,sh和apache deamons可能永远不会返回(它们通常会在几分钟后超时)。从调用的网页来看,脚本似乎没有返回任何数据。

如果您想启动一个php进程,该进程继续独立于apache(使用不同的父pid)运行,请使用nohub。示例:

exec('nohup-php process.php>process.out 2>process.err</dev/null&');

希望它能帮助

好的,我找到问题了。

事实上,它与后台运行的exec没有任何关系,尤其是因为一个文件的提交不会花费很多时间。

问题是提交需要一个没有显示的用户名和密码,这只会导致apache挂起。

为了解决这个问题,我更改了安装svn的文件夹中的svnserve.conf,并将其更改为允许非身份验证用户进行写访问。

我认为你通常不想这样做,但我的网站已经验证了用户名并在登录时传递

或者,您可以