5

我有一个 CI 实例,它连接到 Db 并在提供页面之前检查权限。如果当前用户无法访问该页面,它将重定向到登录页面。

显然,登录页面设置了权限,以便所有用户都可以访问它。

在最近的一次故障之后,数据库服务器恢复了一个不同的 IP 地址(感谢 Amazon,EC2)。这导致 CI​​ 无法检查任何页面的权限 - 包括登录。由于代码假定除 Yes 之外的任何内容都是 No,因此它重定向到 Login。结果是无限重定向循环。

虽然这个确切的问题不应该再次发生(静态弹性 IP),但我想检测 Db 连接何时关闭并适当处理。

我已经看到了这个 SO Question,这是我想要实现的,但我没有在任何控制器中明确加载数据库,它在自动加载配置文件中。

所以,

如何从 CI 内部查询 Db 连接的状态?我是否必须运行一个无用的查询并检查我是否得到结果,或者是否有更优雅的解决方案?

编辑:检查当前正在钩子中执行:

$hook['post_controller_constructor'] = array(
                                'class'    => 'AuthHook',
                                'function' => 'ValidateCredentials',
                                'filename' => 'auth.php',
                                'filepath' => 'hooks'
                                );
4

2 回答 2

6

您可以扩展控制器并在其构造函数中加载数据库:

    class My_Controller extends CI_Controller {
        public function __construct(){
            parent::__construct();
             if ( $this->load->database() === FALSE )
             {
                //do something
             }
         }
     }

您的所有控制器都将继承新控制器。

于 2012-05-22T16:59:24.700 回答
2

“由于代码假定除了 Yes 之外的任何内容都是 No,因此它重定向到 Login。”

因此,您只需要更改登录逻辑功能以专门检查数据库连接(因此仍会自动加载数据库)。

使用类似的东西

 $result = $this->db->conn_id;  
于 2012-05-22T17:08:14.197 回答