我可以从命令行运行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(只是试图让它正常运行!)无济于事。
答案 0 :(得分:3)
可能是你可以使用svn客户端的PHP。这是一个很好的 http://code.google.com/p/phpsvnclient/
答案 1 :(得分:3)
当您从命令行运行Subversion时,您将自己运行它。也就是说,您是登录并运行命令的用户。
如果您从网页运行Php,则运行Apache httpd守护程序的用户(可能是“apache”,“www”,“runwww”等等,具体取决于平台)。运行PHP脚本的用户可能没有Subversion存储库的读/写权限。
您有两种解决方法:
--username
和--password
命令行参数为您的程序提供用户凭据。答案 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;
Subversion错误“svn:不能 重新编码字符串“可以由 现场错误。尝试
<?php putenv('LANG=en_US.UTF-8'); ?>
(或者您喜欢的任何语言环境) 在你调用shell_exec()
之前
Thread 3:PHP Interactive Shell