【发布时间】:2016-01-10 02:51:52
【问题描述】:
我已经使用 codeigniter 完成了我的网站的构建,并且还构建了一个管理面板,其中可以选择使网站脱机。
它作为布尔值保存在数据库中,因此如果它是 1,则站点处于打开状态,否则它处于脱机状态。我也完成了offline.php 视图文件的制作。
我还在我的数据库中创建了一个 whitelisted_ip 列,其中管理员 IP 保存在一个数组中。唯一的问题是向除白名单 IP 之外的所有人显示维护页面。
我不能为此使用 htaccess,因为我是从管理面板和数据库进行控制的。
我想要什么:
- 当站点从管理面板离线时,向所有人显示维护页面,但 IP 位于数据库中 whitelisted_ip 中的人除外。
到目前为止我所拥有的:
-
offline.php控制器public function index() { $this->db->select('*'); $this->db->from('site'); $this->db->where('1', 1); $query = $this->db->get(); $result = $query->row(); $whitelisted_ip = explode(",", $result->whitelisted_ip); $ip = $this->input->ip_address(); if ($result->site_offline) { if (!in_array($ip, $whitelisted_ip)) { $this->load->view('site_offline'); } else { } } else { redirect(base_url()); } $this->load->view('site_offline'); }
我只需要能够让我网站上的每个页面都有此代码,或者告诉我网站上的每个页面如果网站处于离线状态,则显示该离线页面。
非常感谢任何帮助。谢谢
编辑: 请让我知道这是否可行(对我有用)。
MY_Controller.php文件:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
function offline_mode()
{
$this->db->select('*');
$this->db->from('site');
$this->db->where('1', 1);
$query = $this->db->get();
$result = $query->row();
$whitelisted_ip = explode(",", $result->whitelisted_ip);
$ip = $this->input->ip_address();
if ($result->site_offline) {
if (!in_array($ip, $whitelisted_ip)) {
$this->load->view('site_offline');
}
} else {
redirect(base_url());
}
} }
我所有的其他控制器:
class Page extends MY_Controller
{
public function __construct()
{
parent::__construct();
$this->offline_mode();
$this->load->helper('url');
}
这是一个好方法吗?
【问题讨论】:
-
创建一个父控制器,让所有其他控制器继承它。除了登录控制器。然后在主控制器中,检查站点是否离线。
-
@NiranjanNRaju 所以我需要在每个控制器中添加
extends MY_Controller? -
是的,添加
extends MY_Controller而不是extends CI_Controller。 -
@NiranjanNRaju 我已经编辑了我的问题,如果正确请告诉我,谢谢! :)
-
检查答案,如果需要进行必要的更改。
标签: php codeigniter