麻烦通过PHP的exec运行subversion

时间:2011-01-13 20:57:47

标签: php svn

我可以从命令行运行svn命令,但不能从PHP脚本中运行。值得注意的是,我可以在我的Mac上运行PHP脚本并且它返回预期的数据就好了但是当我将它上传到我的Linux服务器时它将无法工作(从PHP内部...我可以从终端运行svn命令) 。我很确定这是某种用户或权限问题。

我可以(从命令行)运行:

svn log http://whatever.com/svn/foo

但以下工作都没有(单独运行......并非像这样一起运行):

exec('svn log http://whatever.com/svn/foo');
exec('svn log http://whatever.com/svn/foo',$out);
exec('/usr/bin/svn log http://whatever.com/svn/foo');

然而这有效:

exec('ls');

我认为问题是,当我从命令行运行时,我以root身份运行,而当我从PHP运行时,我作为apache用户运行(www-data)?也许?有关如何运行exec('svn log http://whatever.com/svn/foo');的任何建议?

将权限更改为777(只是试图让它正常运行!)无济于事。

3 个答案:

答案 0 :(得分:3)

可能是你可以使用svn客户端的PHP。这是一个很好的 http://code.google.com/p/phpsvnclient/

答案 1 :(得分:3)

当您从命令行运行Subversion时,您将自己运行它。也就是说,您是登录并运行命令的用户。

如果您从网页运行Php,则运行Apache httpd守护程序的用户(可能是“apache”,“www”,“runwww”等等,具体取决于平台)。运行PHP脚本的用户可能没有Subversion存储库的读/写权限。

您有两种解决方法:

  • 通过--username--password命令行参数为您的程序提供用户凭据。
  • 使用Subversion凭据设置运行httpd的用户。一旦完成,它将永远不必再次完成。这样,您的PHP代码就不包含登录凭据。

答案 2 :(得分:2)

以下是我认为可能会有所帮助的几个主题:

Thread 1(阅读更多内容):

$cmd = '/usr/bin/svn list --config-dir /some/place file:///var/subversion/devfoundry/ 2>&1';
exec($cmd, $output); 
$output = implode("\n", $output) . "\n";
echo $output;

Thread 2

  

Subversion错误“svn:不能   重新编码字符串“可以由   现场错误。尝试

<?php
    putenv('LANG=en_US.UTF-8');
?>
     

(或者您喜欢的任何语言环境)   在你调用shell_exec()

之前

Thread 3:PHP Interactive Shell