我已经完成了使用codeigniter构建我的网站,并且还建立了一个管理面板,其中有一个将网站离线的选项。
它被保存在数据库中作为一个布尔值,所以如果它是1,网站是在或否则它是离线的。我也完成了一个offline.php
视图文件。
我还在我的数据库中做了一个whitelsted_ip列,其中管理IP保存在一个数组中。唯一的问题是将维护页面显示给除了白名单IP之外的所有人。
我不能使用htaccess,因为我从管理面板和数据库控制。
我想要的:
- 当站点从管理面板离线时,显示一个维护页面给所有人,但其IP在数据库中的whitelsted_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
file:
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');
}
这是一个好方法吗?
这样修改
public function __construct()
{
parent::__construct();
$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());
}
}
}
我的意思是,没有必要保留函数并每次都调用它。将代码保存在构造函数中。所以每次它都会检查网站是否离线。
如果你想把它保持为函数,就像这样修改构造函数,
public function __construct()
{
parent::__construct();
$this->offline_mode();
}
所以在这两种情况下,我们将编写代码只检查一次,不需要在每个控制器中调用函数