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

时间:2015-10-12 15:01:06

标签: php codeigniter

我已经使用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');
}

这是一个好方法吗?

1 个答案:

答案 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();
}

因此,在这两种情况下,您只需编写一次代码来检查,无需在每个控制器中调用该函数。