Intereting Posts

Как построить «режим обслуживания» в Codeigniter?

Я использую новейший codeigniter, и мне нужно создать флаг (идеально в конфигурации), когда он повернут на «истина», все страницы отображают сообщение «режим обслуживания» вместо выполнения своего кода контроллера.

Какая самая лучшая / простая практика для этого?

Расширьте CI_Controller, поместив новый файл в ваш основной каталог MY_Controller.

В конструкторе этого файла сделайте следующее:

public function __construct() { parent::__construct(); if($this->config->item('maintenance_mode') == TRUE) { $this->load->view('maintenance_view'); die(); } } 

Пусть все контроллеры в вашем приложении наследуются от этого класса.

Здесь мое решение, отлично работает для меня:

Ниже будет вызываться maintanance.php немедленно, так что вы можете продолжить и сломать свой код CI, если мир не увидит его.

Также вы можете добавить свой собственный IP-адрес, чтобы вы могли получить доступ к сайту для тестирования и т. Д.

В index.php добавьте сверху:

 $maintenance = false; ## set to true to enable if ($maintenance) { if (isset( $_SERVER['REMOTE_ADDR']) and $_SERVER['REMOTE_ADDR'] == 'your_ip') { ##do nothing } else { error_reporting(E_ALL); ini_set('display_errors', 1); ## to debug your maintenance view require_once 'maintenance.php'; ## call view return; exit(); } } 

Добавьте файл Maintanance.php в ту же папку, что и index.php (или путь обновления выше):

 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Maintenance</title> <style> body { width:500px; margin:0 auto; text-align: center; color:blue; } </style> </head> <body> <img src="images/home_page_logo.png"> <h1><p>Sorry for the inconvenience while we are upgrading. </p> <p>Please revisit shortly</p> </h1> <div></div> <img src="images/under-maintenance.gif" > </body> </html> <?php header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 3600'); ?> 

как насчет этого :

  1. создавать автоматически загруженные библиотеки, которые всегда проверяют флаг обслуживания в вашей базе данных.
  2. создайте модуль для управления флагом обслуживания вашего приложения.
  3. создать модуль для перенаправления при включенном режиме обслуживания

автозагружаемые библиотеки могут содержать что-то вроде этого:

 class Maintenance_mode { function __construct(){ $CI =& get_instance(); $check_maintenance = $CI->db->select('flag_mode')->get('tbl_settings')->result(); if($check_maintenance[0]->flag_mode == '1') redirect(site_url('maintenance_mode_controller')); } } 

Следующим шагом будет создание контроллера для страницы обслуживания.

Вот что я разработал для создания режима обслуживания.

  1. Включить Крючки в файле config.php
  2. Создайте страницу error_maintenance.php в папке с ошибками
  3. Создайте привязку под названием Hook
  4. В настройках конфигурации hooks ваш крючок вызывает запуск на post_controller

Приложение / ошибки / error_maintenance.php

 <!DOCTYPE html> <html> <head> <title>Maintenance</title> <style>Style your page</style> </head> <body> <p>We apologize but our site is currently undergoing maintenance at this time.</p> <p>Please check back later.</p> </body> </html> 

Применение / Крючки / maintenance.php

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class maintenance { var $CI; public function maintenance() { $this->CI =& get_instance(); $this->CI->load->config("config_maintenance"); if(config_item("maintenance")) { $_error =& load_class('Exceptions', 'core'); echo $_error->show_error("", "", 'error_maintenance', 200); exit; } } } 

приложение / Config / hooks.php

 $hook['post_controller'][] = array( 'class' => 'maintenance', 'function' => 'maintenance', 'filename' => 'maintenance.php', 'filepath' => 'hooks', 'params' => array() ); 

Здесь мое решение, просто, чистое и эффективное для всех запросов URL и SEO уважает:


Добавьте эти переменные в: application / config / config.php

 $config['maintenance_mode'] = TRUE; $config['maintenance_ips'] = array('0.0.0.0', '1.1.1.1', '2.2.2.2'); 

Добавьте это условие в конце: application / config / routes.php

 if(!in_array($_SERVER['REMOTE_ADDR'], $this->config->item('maintenance_ips')) && $this->config->item('maintenance_mode')) { $route['default_controller'] = "your_controller/maintenance"; $route['(:any)'] = "your_controller/maintenance";"; } 

Создание обслуживания методов в: application / controllers / your_controller .php

 function maintenance() { $this->output->set_status_header('503'); $this->load->view('maintenance_view'); } 

Создать представление: application / views / maintenance_view.php

 <!DOCTYPE html> <html> <head> <title>Maintenance</title> </head> <body> <p>We apologize but our site is currently undergoing maintenance at this time.</p> <p>Please check back later.</p> </body> </html> 

это хорошо работает,

Приложение / просмотров / vw_maintenance.php

  <!DOCTYPE html> <html> <head> <title>Maintenance</title> <style>Style your page</style> </head> <body> <p>We apologize but our site is currently undergoing maintenance at this time.</p> <p>Please check back later.</p> </body> </html> <?php exit(); ?> 

функция exit () очень важна, чтобы не забыть положить ее внизу, это предотвратит отображение всех страниц.

Приложение / библиотеки / maintenance.php

 class Maintenance{ private $CI; public function __construct() { $this->CI =& get_instance(); // flag on and off $this->flag( $this->CI->uri->segment(1) ); // get the flag status $check_maintenance = $this->CI->db->select('flag_mode')->where(array('setting_name' => 'maintenance'))->get('tbl_settings')->result(); //display view if true if($check_maintenance[0]->flag_mode == '1') $this->CI->load->view('vw_maintenance'); } private function flag($command){ $this->CI->db->where('setting_name', 'evolving'); switch($command){ case "activate": $this->CI->db->update('tbl_settings', array('flag_mode' => 1) ); break; case "deactivate": $this->CI->db->update('tbl_settings', array('flag_mode' => 0) ); redirect(site_url('/')); break; } } } 

автозагрузите библиотеку, чтобы она проверяла каждую загрузку каждой страницы.

теперь вы можете активировать и деактивировать режим обслуживания, набрав или