我已经使用codeigniter构建了我的网站,并且还构建了一个管理面板,其中有一个选项可以使网站脱机。
它作为布尔值保存在数据库中,因此如果它为1,则该站点处于打开状态,否则它处于脱机状态。我还完成了一个offline.php
视图文件。
我还在我的数据库中创建了一个whitelisted_ip列,其中管理员IP保存在一个数组中。唯一的问题是向所有人显示维护页面,但白名单IP。
我无法使用htaccess,因为我是从管理面板和数据库控制的。
我想要的是什么:
到目前为止我所拥有的:
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');
}
这是一个好方法吗?
答案 0 :(得分:1)
这样改变。
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();
}
因此,在这两种情况下,您只需编写一次代码来检查,无需在每个控制器中调用该函数。