Php Laravel远程/SSH捕获SSH2异常

Php Laravel远程/SSH捕获SSH2异常,php,ssh,laravel-4,phpseclib,Php,Ssh,Laravel 4,Phpseclib,当我尝试使用Laravel4.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 我想知道是否有

当我尝试使用Laravel4.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执行
user\u错误(“服务器关闭连接”)(参见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代表您将错误转换为异常。参见(第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
    }
});

查看可用的。

因此,考虑到这一点,例如,如果触发此错误,是否可以再次尝试连接?@ClarkT。绝对地我对您的代码库了解不多,无法告诉您具体如何操作,但是如果您仅将SSH库用于这一个任务,那么在条件中(在我提供的第二个代码段中)再次调用该任务应该很容易。这是您建议的正确实现吗?