php用exec执行svn失败,PHP:exec(svn commit)不会返回任何错误,也无法正常工作

目前,我正在用php将文件写到目录中,我将该目录添加(工作正常),然后当我尝试执行svn时,提交它不起作用,也不返回任何错误代码.有人对此有任何想法吗?

$tmp = exec('cd '.$this->build_locations[$this->type].'; svn commit --username user --password pw; ls', $output);

我将cd转到目录(在此执行ls工作正常),然后再执行ls确认其仍在目录中.

我也尝试过:

svn help

这使我所有的命令都很好(所以我知道找不到svn命令不是问题.

我已将文件777更改为可以执行的文件.

编辑代码:

$output = array();

$tmp1 = exec("cd ".$this->build_locations[$this->type].";");

$tmp = exec("svn commit ".$this->build_locations[$this->type].$this->app_id." --username user --password password -m 'test' --non-interactive --trust-server-cert --quiet 2>&1;", $output, $error);

if($error){

echo('

');

print_r($output);

echo('

');

}

exit;

这将产生:

Array

[0] => could not lookup DNS configuration info service: (ipc/send) invalid destination port

[1] => svn: Commit failed (details follow):

[2] => svn: Unknown hostname 'my.host'

解决方法:

SVN命令行错误出现在stderr而不是stdout上,这就是为什么您看不到它们的原因.您要执行的操作是将stderr重定向到stdout,然后将print_r($output)重定向以确定错误原因.

exec('svn commit 2>&1', $output, $returnStatus);

if ( $returnStatus )

{

print_r($output);

}

样本输出:

Array

(

[0] => svn: Commit failed (details follow):

[1] => svn: '/path/to/' is not under version control

)

这是不理想的,因为在本来没有必要的情况下,它将stderr与stdout混合在一起,但是在这种情况下,我不知道另一种获得所需输出的方法.如果有人这样做,请发表评论.

注意:exec(…)的第三个参数是返回状态,而不是错误消息,因此您也需要相应地调整代码.

如果进行2& 1修改后的错误输出不能帮助解决问题的根本原因,请在此处发布新的输出.

编辑新信息后:

您是否将此SVN工作副本从其他地方上传到您的服务器?那可以解释这个错误.

如果我从本地存储库中签出工作副本,将其上传到远程服务器,然后尝试提交,则会遇到相同的错误.

在这种情况下,您需要在运行PHP脚本的服务器上执行工作副本的“ svn签出”,以便能够对其进行提交.如果该服务器无法与存储库的服务器通信,那将是另一个问题.

标签:php,svn,exec

来源: https://codeday.me/bug/20191012/1900072.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值