php exec(svn commit)挂起

时间:2012-03-03 21:11:17

标签: php svn exec commit hang

我知道那里有类似的问题,但他们没有解决我的问题......

从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 cleanup USER_WORKSPACE / 0A8288 svn commit -m" SAVE DITAMAP" USER_WORKSPACE / 0A8288 / map.ditamap

1)第一行(exec(' svn cleanup')...执行正常。 2)一旦我调用svn commit,我的服务器就会挂起,一切都会变成地狱

apache错误日志显示此错误: [通知]儿童3424:等待4个工作线程再完成240秒。

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

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

2 个答案:

答案 0 :(得分:2)

因为我找不到关于jquery exec()的任何文档,我假设这是调用php。我从documentation页面复制了这个:

从apache php脚本中调用exec()时,请务必注意stdout,stderr和stdin(如下例所示)。如果你忘了这个并且你的shell命令产生输出,sh和apache deamons可能永远不会返回(它们通常会在几分钟后超时)。在调用网页中,脚本似乎不会返回任何数据。

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

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

希望有所帮助

答案 1 :(得分:1)

好的,我发现了问题。

它实际上与运行后台的exec没有任何关系,特别是因为一个文件提交不需要花费很多时间。

问题是提交期望--username和--password没有显示,只是导致apache挂起。

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

我认为您通常不想这样做,但我的网站已经对用户名进行身份验证并传递登录信息。

或者你可以