5 つのデータベースを含む構成ファイル database.php があります。
データベースの 1 つが利用できない場合、すべてのページで "Site is not available" というメッセージで 500 エラーを取得するにはどうすればよいですか?
5 つのデータベースを含む構成ファイル database.php があります。
データベースの 1 つが利用できない場合、すべてのページで "Site is not available" というメッセージで 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(),
);
したがって、コントローラーがインスタンス化されるとフックが開始されますが、まだメソッドは実行されていません。これは $CI = &get_instance() を使用するために必要です
最後に、次のような内容のファイル /application/hooks/dbtest.php を作成します。
<?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->load->database() に dsn を使用する必要があります。これにより、Code Igniter がデータベースをロードしようとしたときにエラーを処理できます。
お役に立てれば。