9

私は最新の codeigniter を使用しており、(理想的には設定で) フラグを作成する必要があります。これを「true」にすると、すべてのページがコントローラー コードを実行する代わりに「メンテナンス モード」メッセージを表示します。

これを行うためのベスト/最も簡単な方法は何ですか?

4

7 に答える 7

35

ここで私の解決策は、私にとってはうまくいきます:

以下は、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');
?>
于 2013-10-09T09:39:54.257 に答える
24

MY_Controller というコア ディレクトリに新しいファイルを配置して、CI_Controller を拡張します。

このファイルのコンストラクターで、次のようにします。

public function __construct()
{
    parent::__construct();

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

アプリ内のすべてのコントローラーがそのクラスから継承できるようにします。

于 2013-03-22T14:27:42.160 に答える
7

ここで私のソリューションは、すべての 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>
于 2016-11-09T09:32:32.720 に答える
2

これはどう :

  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'));
    }
}

次のステップは、メンテナンスページ用のコントローラーを作成することです。

于 2013-03-22T14:29:08.127 に答える
0

これは簡単だったと思います。以下のようにコンストラクターでビューを呼び出すだけです。

コメント (サイトはライブになります)

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」ページを使用できます。

于 2021-02-24T15:19:09.283 に答える
0

これはうまく機能し、

アプリケーション/ビュー/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;

        }
    }

}

ライブラリを自動ロードして、すべてのページロードがチェックされるようにします。

またはを入力して、メンテナンスモードをアクティブ化および非アクティブ化できるようになりました

于 2015-02-04T10:57:24.733 に答える