2010-06-01 63 views
3

我有两个脚本。通过浏览器从PHP脚本调用svn更新不起作用

  1. 运行的更新,并调用了shell_exec( 'SVN更新'),并了shell_exec( 'SVN ST')
  2. 运行的mysqldump了shell_exec( '的mysqldump PARAMS')

的SVN脚本不是运行更新命令,svn st打印结果,但不是svn update

我试图声明参数时调用svn更新例如 'svn更新'。 dir。 '--username myuser --password mypasswd --non-interactive'; - 仍然没有 玩大部分参数

如果这是与二进制文件/权限/组相关的东西,我没有看到它。 mysqldump命令正常工作,正在生成一个文件,为什么svn不更新文件系统?

请不要建议在PHP中使用核心SVN类。这不是一个选项,我没有完全控制服务器,并且该模块不可用。

感谢您的帮助,

-hbt

PS:重要的事情在这里提及。当通过命令行调用时,脚本工作。只有通过Web浏览器调用时才会失败。

+0

您确定在从web调用'shell_exec('svn update')'的结果为空时浏览器吗?很可能是权限问题(svn工作目录和http进程的用户不同),但在这种情况下,应该出现“svn:无法打开文件”.svn/lock':Permission denied“等错误。 – 2010-06-01 07:25:01

+0

您是否已经尝试捕获输出并将其转储到屏幕上/在调试时查看输出?即。 '$ output = shell_exec('svn update ...');的print_r($输出);'。你确定你没有忘记把文件夹作为变量引用(因为给出的例子包含dir而不是$ dir,除非dir被定义为一个命名常量)。 – wimvds 2010-06-01 07:25:41

+0

@alexander 确实发布了许可。这是.svn目录。 svn update命令试图在那里写东西。 感谢您的帮助 – hbt 2010-06-02 10:58:07

回答

1

好的。我知道了。 这是权限问题。 .svn目录必须具有正确的权限,因为svn update命令使用这些目录来写入内容。

所以! ---确保你运行的所有搭配chmod命令,须藤或根----

  1. 运行上的.svn目录在chmod 777
  2. 通过命令行运行SVN更新
  3. 调用脚本

如果没有。您必须对所有.svn目录递归运行chmod 777,然后运行另一个svn更新

什么都没有?

确保你没有这两个SVN客户 在我的情况下,由UI使用的svn客户端从SVN(命令行)不同 如果您有两个客户,确保它们都运行同一版本 或更新您的脚本以直接致电客户。

什么都没有?

运行在chmod 777 -R * SVN更新 ,然后再试一次

如果你可以把它与另一组权限的工作,请让我知道。我知道777并不理想,但我不能用更低的东西来工作。

再次感谢你们。

0

这可能是权限问题:通过Web浏览器调用的脚本以不同于svn工作目录的所有者的用户名运行,因此它具有只读访问权限。只读访问应该足够执行svn status,但不适用于svn update(尽管在这种情况下应该有一个错误,如“svn:无法打开文件'.svn/lock':Permission denied”)。

+0

没有错误,但有权限修复。在下面发布答案。 谢谢! – hbt 2010-06-02 11:00:22

1

您是否试过PECLsvn extension?您无需为此使用shell_exec

+0

不幸的是,svn扩展在服务器上不可用。 – hbt 2010-06-02 10:59:47

1

得到标准错误的返回值使用:

shell_exec('2>&1 svn update') 

如果你把2>&1在结束它不起作用

1

是的,问题出在.svn文件的权限目录。

确保它有针对PHP运行在用户正确的权限(在我的情况下,它是阿帕奇)和chmod它775

3

我也遇到了同样的问题,但甚至没有权限解决它。

基于其他一些意见在这里,我所做的:

<?php 
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive'); 

我便起身倾倒入我的浏览器错误:

svn: warning: Can't open file '/root/.subversion/servers': Permission denied 
svn: OPTIONS of 'http://my.svn.server/svn/project/trunk': authorization failed: Could not authenticate to server: rejected Basic challenge (http://my.svn.server) 

不知道为什么我的Web服务器用户尝试访问/ root,但我通过在svn up命令中添加--config-dir来修复了问题,但没有更改任何权限:

<?php 
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion'); 

*请注意,/path/to/my/home/.subversion的存在是因为初始签出是在命令行执行的