2009-11-25 75 views
2

由于我无法继续我的项目工作,现在有些事情让我感到非常紧张。我已经切换到另一台计算机,不能让PHP和svn可执行一起很好地工作:)PHP:在exec()中使用SVN子命令和选项会导致“分段错误”?

$output = ""; 
$value = ""; 
exec("/opt/subversion/bin/svn info --username something --password something --non-interactive <REPO_URL> 2>&1", $output, $value); 

var_dump($output); 
var_dump($value); 

输出:

array(0) { } int(139) 

139 =分割的错,但它并没有太大的帮助因为我不知道可能导致它的原因。在终端中直接运行相同的代码就像魅力一样,但如果PHP试图通过exec()来执行相同的操作,则会出现问题。

如果我去掉认证,我会得到正确的输出(认证请求)。

修改Subversion可执行文件到777似乎没有任何区别。

如果它是任何使用的,它的Mac OS X 10.5.8,PHP 5.2.11和Apache 2.2.13

回答

1

exec()不与<与>重定向操作符的工作:这些都是一个壳的功能。简单的解决方法是改为拨打system()

+0

到目前为止,它在每个系统上工作得非常好,代码实际上是商业应用程序的一部分。 Ommiting重定向输出不会影响任何内容。该问题只出现在我的本地计算机上。 – 2009-11-25 23:48:05

+0

我无法编辑我的评论:我已经尝试过'system()',但它返回一个空字符串作为输出,'int(139)'作为返回值,几乎与'exec()'相同。 – 2009-11-26 00:05:10

0

几个问题:

  1. 什么是你正在使用的“带出的认证”的准确代码PHP的?

  2. 您的用户名或密码是否包含可能会导致shell或php混淆的“有趣”字符? (引号,反引号等)

+0

1.“strip out”=如果我删除身份验证=如果我尝试不提供用户名和密码='“/ opt/subversion/bin/svn info - 非交互式 2>&1' 2.用户名和密码只包含字母和数字 – 2009-11-30 16:19:26

+0

同样,请注意,这是一个孤立的问题,只出现在一个系统上,相同的代码可以在许多不同的Web服务器上平滑运行。 – 2009-11-30 16:21:59

+0

这可能是一个服务器配置问题,也许你应该试试这个问题serverfault.com。 – svec 2009-12-02 16:11:42

1

我的PHP应用程序从Windows服务器移动到UNIX后,我也有类似的问题。更具体地说,我通过shell_exec()运行的几个svn命令返回空输出。

在我的情况下,问题与.svn目录和包含文件的UNIX权限有关。我的svn结帐由一个标准用户帐户拥有。但是,当PHP脚本(通过Apache进程)运行shell_exec()命令时,它使用不具有对.svn目录及其中重要文件(例​​如.svn)的写入访问权限的其他帐户(nobody:nobody)执行此操作。锁文件)。

对于我来说,解决方案是使用chown命令来创建与Apache进程相同的组所拥有的.svn目录/文件(chown -R:nobody .svn)。

+0

我没有签出文件 - 只是在存储库上使用“svn info”,并且我一直没有输出(尽管我将输出复制粘贴到终端中)。设置自定义配置目录没有任何好处,所以我放弃了保存/读取svn的配置数据的问题。简单地说,svn info没有输出,而“svn --version”,例如,返回输出很好: - / – 2010-01-01 03:14:03