为什么try-catch不能与Laravel 5.5中的phpseclib库一起使用?

问题描述 投票:0回答:1

我正在开发一个项目,要求我在远程服务器上执行一些命令。我正在使用Laravel 5.5,包名为“laravelcollective / remote”,它使用SSH2连接远程服务器。

但是,我面临着一些服务器的一些非常奇怪的问题。我在某些服务器上收到以下错误消息。

production.ERROR:连接提前关闭{“exception”:“[object](ErrorException(code:0):在/home/username/application_name/public_html/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php中提前关闭连接:3821,RuntimeException(代码:0):无法连接到远程服务器。在/home/username/application_name/public_html/vendor/laravelcollective/remote/src/Connection.php:143)

我使用try-catch块来捕获异常,但我无法捕获此异常。除了这个之外,所有其他例外情况如connection timed out都被try-catch块捕获。

我正在使用try catch块,如下所示:

try {
    $commands = array('sudo apt-get update','sudo apt-get upgrade -y');
    SSH::run($commands);
} catch (\Exception $e){
    report($e);
}

但try-catch块停止使用此connection closed prematurely错误。我不知道我是否遗漏了某些东西,或者图书馆有一些错误,以前有人遇到过同样的问题吗?我怎样才能以正确的方式捕捉到这个错误?

php laravel laravel-5.5 phpseclib
1个回答
0
投票

这是因为没有抛出异常,只是一个错误。并且无法捕获错误。

我建议你设置一个全局错误处理程序,将所有错误转换为异常,如this answer here中所示,读取该问题的其他答案也是一个好主意。

生成自定义异常处理程序,然后在提供程序或public / index.php中设置错误处理程序

© www.soinside.com 2019 - 2024. All rights reserved.