我有一个CI实例连接到Db并在提供页面之前检查权限。如果当前用户无法访问该页面,则会重定向到登录页面。
显然,登录页面设置了权限,以便所有用户都可以访问。
最近出现故障后,数据库服务器重新启动了另一个IP地址(谢谢Amazon,EC2)。这导致CI无法检查任何页面的权限 - 包括登录。由于代码假定除了Yes之外的任何内容都是No,它会重定向到Login。结果是无限重定向循环。
虽然这个确切的问题不应再发生(静态弹性IP),但我想检测Db连接何时关闭并正确处理它。
我见过This SO Question这是我想要实现的,但我没有明确地在任何控制器中加载数据库,它位于自动加载配置文件中。
所以,
如何从CI内部查询Db连接的状态?我是否必须运行无用的查询并检查我是否得到了结果或是否有更优雅的解决方案?
编辑:当前正在钩子中执行检查:
$hook['post_controller_constructor'] = array(
'class' => 'AuthHook',
'function' => 'ValidateCredentials',
'filename' => 'auth.php',
'filepath' => 'hooks'
);
答案 0 :(得分:6)
您可以扩展控制器并在其构造函数中加载数据库:
class My_Controller extends CI_Controller {
public function __construct(){
parent::__construct();
if ( $this->load->database() === FALSE )
{
//do something
}
}
}
所有控制器都将继承新控制器。
答案 1 :(得分:2)
“由于代码假定除了”是“之外的任何内容都是”否“,它会重定向到”登录“。
因此,您只需要更改登录逻辑功能以专门检查数据库连接(因此仍然自动加载数据库)。
使用类似
的内容 $result = $this->db->conn_id;