PHP passthru()返回“;sh:1:svn:未找到”;错误


PHP passthru() returning "sh: 1: svn: not found " error

我们大学在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');
?>