我们大学在Linux服务器上有免费托管,我在那里把一个SVN项目签入了我当地的学生目录。在远程登录到服务器时,我在服务器上的SVN项目沙箱中添加/提交/etc没有问题。
我在同一台服务器上有一个PHP脚本,它进行passthrough调用,在沙盒上执行一个简单的SVN版本号命令:
<?php
echo passthru(' 2>&1 cd /nav/to/svnSandbox && 2>&1 svn --version ');
?>
上面的exec()调用在服务器端失败并输出
"sh:1:svn:未找到"。这意味着SVN没有安装?然而,它实际上是安装在服务器上的,而且我在登录时可以很好地使用SVN
以下PHP代码工作正常:
<?php
echo passthru('pwd');
?>
PHP脚本和SVN沙箱目录的用户权限为755(我也尝试过许多其他变体)。我也读过这个链接以及其他许多链接。
PHP脚本是否未被授予对服务器端SVN命令的特定访问权限?
为什么我不能从脚本中成功调用SVN exec()?有没有比我上面的代码更简单的方法?
服务器管理员通常对使用exec()的脚本有某种我不知道的保护措施吗?
这意味着SVN没有安装?
不,这只是意味着在您的路径中找不到svn
。
可能是因为它没有安装,也可能是因为你的路径没有为你使用的方法正确设置。
比较的输出
<?php
echo passthru('echo $PATH');
?>
以及当登录到该盒子时执行CCD_ 2。
您可能会在后者上找到svn
目录,但在前者上找不到。
然后就是弄清楚如何为passthrough方法设置路径的问题。
可能就像一样简单
<?php
echo passthru('( cd /nav/to/svnSandbox; PATH=$PATH:/svnpath; svn --version ) 2>&1');
?>
或:
<?php
echo passthru('( cd /nav/to/svnSandbox; /svnpath/svn --version ) 2>&1');
?>