私は最新の codeigniter を使用しており、(理想的には設定で) フラグを作成する必要があります。これを「true」にすると、すべてのページがコントローラー コードを実行する代わりに「メンテナンス モード」メッセージを表示します。
これを行うためのベスト/最も簡単な方法は何ですか?
私は最新の codeigniter を使用しており、(理想的には設定で) フラグを作成する必要があります。これを「true」にすると、すべてのページがコントローラー コードを実行する代わりに「メンテナンス モード」メッセージを表示します。
これを行うためのベスト/最も簡単な方法は何ですか?
ここで私の解決策は、私にとってはうまくいきます:
以下は、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');
?>
MY_Controller というコア ディレクトリに新しいファイルを配置して、CI_Controller を拡張します。
このファイルのコンストラクターで、次のようにします。
public function __construct()
{
parent::__construct();
if($this->config->item('maintenance_mode') == TRUE) {
$this->load->view('maintenance_view');
die();
}
}
アプリ内のすべてのコントローラーがそのクラスから継承できるようにします。
ここで私のソリューションは、すべての 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>
これはどう :
自動ロードされたライブラリには、次のようなものを含めることができます。
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'));
}
}
次のステップは、メンテナンスページ用のコントローラーを作成することです。
これは簡単だったと思います。以下のようにコンストラクターでビューを呼び出すだけです。
コメント (サイトはライブになります)
class home extends CI_Controller {
public function __construct() {
parent::__construct();
//echo $this->load->view('maintenance','',true);exit;
}
}
コメントを外してください(サイトはメンテナンス中です)
class home extends CI_Controller {
public function __construct() {
parent::__construct();
echo $this->load->view('maintenance','',true);exit;
}
}
また、CI アプリケーションの「view」の下にある独自の「maintenance.php」ページを使用できます。
これはうまく機能し、
アプリケーション/ビュー/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;
}
}
}
ライブラリを自動ロードして、すべてのページロードがチェックされるようにします。
またはを入力して、メンテナンスモードをアクティブ化および非アクティブ化できるようになりました