当我尝试使用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的SSH库使用phpseclib。连接失败时,phpseclib将执行user_error('Connection closed by server');
(请参见Net / SSH2.php,第〜911行)。 Laravel有一个全局错误处理程序,可以选择并记录(如您在问题中所看到的)。
不幸的是,phpseclib触发错误,而不是引发异常。如果它们是异常(exception),则可以向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/