php - Laravel Remote/SSH 捕获 SSH2 异常

标签 php ssh laravel-4 phpseclib

当我尝试使用 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/

相关文章:

python - 使用 python 脚本通过 SSH 连接到服务器

ssh - 如何修复 gitlab Ci/CD 中的权限被拒绝(公钥、密码)?

laravel-4 - 如何离线安装 Laravel 4

php - 无法在写入上下文中使用函数返回值 Laravel 4

php - 将 Node 与 MySql 一起使用或将 Node 与 PHP 一起使用(这将处理 MySql 操作)

php - 如何在 Dreamweaver 中不更新数据库的情况下将 PHP 表单数据保存到 session 变量?

php - 字段未从 php 插入到 mysql 数据库中

php - 想象一下。将颜色更改为透明

ssh - 使用Ansible SSH到远程服务器

laravel - services.json 未能打开流 : Permission denied in Laravel 4