我有一个CI实例,它连接到数据库并在提供页面之前检查权限。如果当前用户无法访问该页面,则重定向到登录页面。
显然,登录页面的权限设置使其对所有用户都可访问。
最近出现了一个故障,导致数据库服务器在不同的IP地址上重新启动(感谢亚马逊EC2)。这导致CI无法检查任何页面的权限-包括登录。由于代码认为除了Yes以外的任何内容都是No,它会重定向到登录页面。结果是无限重定向循环。
虽然这个确切的问题不应该再次发生(静态弹性IP),但我想在Db连接断开时检测它并适当地处理它。
我看到了这个SO问题,这就是我想要实现的,但我没有在任何控制器中明确加载数据库,而是在autoload配置文件中加载。
那么,
如何从CI内部查询Db连接的状态?我必须运行一个无用的查询并检查是否返回结果,还是有更优雅的解决方案?
编辑:检查当前正在使用的钩子。
显然,登录页面的权限设置使其对所有用户都可访问。
最近出现了一个故障,导致数据库服务器在不同的IP地址上重新启动(感谢亚马逊EC2)。这导致CI无法检查任何页面的权限-包括登录。由于代码认为除了Yes以外的任何内容都是No,它会重定向到登录页面。结果是无限重定向循环。
虽然这个确切的问题不应该再次发生(静态弹性IP),但我想在Db连接断开时检测它并适当地处理它。
我看到了这个SO问题,这就是我想要实现的,但我没有在任何控制器中明确加载数据库,而是在autoload配置文件中加载。
那么,
如何从CI内部查询Db连接的状态?我必须运行一个无用的查询并检查是否返回结果,还是有更优雅的解决方案?
编辑:检查当前正在使用的钩子。
$hook['post_controller_constructor'] = array(
'class' => 'AuthHook',
'function' => 'ValidateCredentials',
'filename' => 'auth.php',
'filepath' => 'hooks'
);
ValidateCredentials
代码插入到My_Controller
构造函数中,在parent::__construct();
之后。如果所有的控制器都继承自MY_Controller
,则功能将保持不变。 - Yan Berk