Codeigniter 如何检查CI 2中所有数据库的可用性

Codeigniter 如何检查CI 2中所有数据库的可用性,codeigniter,codeigniter-2,Codeigniter,Codeigniter 2,我有5个数据库的配置文件database.php 如果某个数据库不可用,如何在所有页面中显示“站点不可用”的500错误消息?我发现您的问题非常有趣,并一直在做一些研究来解决您的问题。 我告诉您我的解决方案:首先是激活挂钩,因此在config.php文件中进行以下更改: $config['enable_hooks'] = TRUE; 激活钩子后,需要创建一个新钩子,在config/hooks.php文件中放入如下内容: $hook['post_controller_constructor'] =

我有5个数据库的配置文件database.php


如果某个数据库不可用,如何在所有页面中显示“站点不可用”的500错误消息?

我发现您的问题非常有趣,并一直在做一些研究来解决您的问题。 我告诉您我的解决方案:首先是激活挂钩,因此在config.php文件中进行以下更改:

$config['enable_hooks'] = TRUE;
激活钩子后,需要创建一个新钩子,在config/hooks.php文件中放入如下内容:

$hook['post_controller_constructor'] = array(
  'class'    => 'DBTest',
  'function' => 'index',
  'filename' => 'dbtest.php',
  'filepath' => 'hooks',
  'params'   => array(),
);
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DBTest {

  function index() {

    $CI = &get_instance();

    $databases = array(
      'mysqli://user1:pass1@host1/db1',
      'mysqli://user2:pass2@host2/db2',
      'mysqli://user3:pass3@host3/db3',
      'mysqli://user4:pass4@host4/db4',
      'mysqli://user5:pass5@host5/db5',
    );

    foreach ($databases as $dsn) {

      $db_name = substr(strrchr($dsn, '/'), 1);
      $CI->load->database($dsn);
      $CI->load->dbutil();

      if(!$CI->dbutil->database_exists($db_name)) {
        // if connection details incorrect show error
        show_error("Site is not available: can't connect to database $db_name");                
      }
    }

  }
}
因此,一旦控制器被实例化,但还没有运行任何方法,钩子就会启动。这是使用$CI=&get_instance()所必需的

要完成创建文件/application/hooks/dbtest.php,其内容类似于以下内容:

$hook['post_controller_constructor'] = array(
  'class'    => 'DBTest',
  'function' => 'index',
  'filename' => 'dbtest.php',
  'filepath' => 'hooks',
  'params'   => array(),
);
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DBTest {

  function index() {

    $CI = &get_instance();

    $databases = array(
      'mysqli://user1:pass1@host1/db1',
      'mysqli://user2:pass2@host2/db2',
      'mysqli://user3:pass3@host3/db3',
      'mysqli://user4:pass4@host4/db4',
      'mysqli://user5:pass5@host5/db5',
    );

    foreach ($databases as $dsn) {

      $db_name = substr(strrchr($dsn, '/'), 1);
      $CI->load->database($dsn);
      $CI->load->dbutil();

      if(!$CI->dbutil->database_exists($db_name)) {
        // if connection details incorrect show error
        show_error("Site is not available: can't connect to database $db_name");                
      }
    }

  }
}

我发现你的问题非常有趣,并且一直在做一些研究来解决你的问题。
我告诉您我的解决方案:首先是激活挂钩,因此在config.php文件中进行以下更改:

$config['enable_hooks'] = TRUE;
激活钩子后,需要创建一个新钩子,在config/hooks.php文件中放入如下内容:

$hook['post_controller_constructor'] = array(
  'class'    => 'DBTest',
  'function' => 'index',
  'filename' => 'dbtest.php',
  'filepath' => 'hooks',
  'params'   => array(),
);
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DBTest {

  function index() {

    $CI = &get_instance();

    $databases = array(
      'mysqli://user1:pass1@host1/db1',
      'mysqli://user2:pass2@host2/db2',
      'mysqli://user3:pass3@host3/db3',
      'mysqli://user4:pass4@host4/db4',
      'mysqli://user5:pass5@host5/db5',
    );

    foreach ($databases as $dsn) {

      $db_name = substr(strrchr($dsn, '/'), 1);
      $CI->load->database($dsn);
      $CI->load->dbutil();

      if(!$CI->dbutil->database_exists($db_name)) {
        // if connection details incorrect show error
        show_error("Site is not available: can't connect to database $db_name");                
      }
    }

  }
}
因此,一旦控制器被实例化,但还没有运行任何方法,钩子就会启动。这是使用$CI=&get_instance()所必需的

要完成创建文件/application/hooks/dbtest.php,其内容类似于以下内容:

$hook['post_controller_constructor'] = array(
  'class'    => 'DBTest',
  'function' => 'index',
  'filename' => 'dbtest.php',
  'filepath' => 'hooks',
  'params'   => array(),
);
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DBTest {

  function index() {

    $CI = &get_instance();

    $databases = array(
      'mysqli://user1:pass1@host1/db1',
      'mysqli://user2:pass2@host2/db2',
      'mysqli://user3:pass3@host3/db3',
      'mysqli://user4:pass4@host4/db4',
      'mysqli://user5:pass5@host5/db5',
    );

    foreach ($databases as $dsn) {

      $db_name = substr(strrchr($dsn, '/'), 1);
      $CI->load->database($dsn);
      $CI->load->dbutil();

      if(!$CI->dbutil->database_exists($db_name)) {
        // if connection details incorrect show error
        show_error("Site is not available: can't connect to database $db_name");                
      }
    }

  }
}

那么,你是说如果一个数据库无法连接,你就要关闭对该站点的访问吗?那么,你是说如果一个数据库无法连接,你就要关闭对该站点的访问吗?