【问题标题】:Codeigniter - Put site in Maintenance mode WITHOUT using htaccessCodeigniter - 将站点置于维护模式而不使用 htaccess
【发布时间】: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


【解决方案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();
}

所以在这两种情况下,你只需编写代码检查一次,无需在每个控制器中调用函数。

【讨论】:

  • 谢谢,我编辑了代码。现在,如果页面处于脱机状态,它会显示脱机页面,但也会显示其他页面。 die() 也不起作用。
猜你喜欢
  • 2017-05-16
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多