当我尝试使用 laravel 4.1 的 SSH/Remote 类部署东西时,偶尔会遇到此异常
[2014-01-03 18:26:21] production.ERROR: exception 'ErrorException' with message 'Connection closed by server' in /home/{user}/{location}/deploy/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:918
我想知道是否有一种方法可以检测连接是否失败,以便再次或多次尝试连接?
有什么想法吗?
最佳答案
Laravel 使用phpseclib其 SSH 库。连接失败时,phpseclib 执行 user_error('Connection Closed by server');
(请参阅 Net/SSH2.php,第 ~911 行)。 Laravel 有一个全局错误处理程序,可以拾取并记录它(正如您在问题中看到的那样)。
不幸的是,phpseclib 会触发错误,而不是抛出异常。如果它们是异常,您可以向 Laravel 的错误处理添加新条件:
App::error(function(Exception $exception){
Log::error($exception);
if($exception instanceof PHPSecLibException){
// Let's handle this
}
});
这绝对是“正确的方法”,但这些都不是真正的异常(它们是触发错误时代表您生成的通用 Laravel 异常)。
幸运的是,Laravel 会代表您将错误转换为异常。请参阅src/Illuminate/Exception/Handler.php (第 129-135 行)。因此,我们可以根据您所拥有的信息添加条件:
App::error(function(Exception $exception){
Log::error($exception);
if(($exception->getMessage() == "Connection closed by server") &&
($exception->getFile() == "/home/{user}/{location}/deploy/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php")){
// Let's handle this
}
});
看看Exception methods可用。
关于php - Laravel Remote/SSH 捕获 SSH2 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910518/