Codeigniter -将站点置于维护模式而不使用htaccess


Codeigniter - Put site in Maintenance mode WITHOUT using htaccess

我已经完成了使用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();
}

所以在这两种情况下,我们将编写代码只检查一次,不需要在每个控制器中调用函数