gpt4 book ai didi

PHP:exec(svn commit) 不返回任何不工作的错误

转载 作者:行者123 更新时间:2023-12-03 07:49:40 24 4
gpt4 key购买 nike

目前我正在用 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 进行了 chmod 操作以确认它可以执行。

编辑后的代码:

    $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('<pre>');
print_r($output);
echo('</pre>');
}
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 <stuff> 2>&1', $output, $returnStatus);
if ( $returnStatus )
{
print_r($output);
}

示例输出:

Array
(
[0] => svn: Commit failed (details follow):
[1] => svn: '/path/to/<stuff>' is not under version control
)

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

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

如果修改 2>&1 后的错误输出无法帮助解决问题的根本原因,请在此处发布新的输出。

新信息后编辑:

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

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

如果是这种情况,您需要在运行 PHP 脚本的服务器上执行工作副本的“svn checkout”,以便能够提交它。如果该服务器无法与存储库的服务器通信,那就是另一个问题了。

关于PHP:exec(svn commit) 不返回任何不工作的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com