CodeIgniter > Tips > 外部ファイルの読込み
前提:以下の説明は、CodeIgniter2.0.1を使用
CodeIgniterのフック機能を使って、外部ファイルを読込む方法が紹介されていました。
CodeIgniterのフック機能の使い方
フック機能は、コントローラーがロードされる直前または直後の段階で、ある処理を実行したい場合や、他の段階でユーザ作成のスクリプトを起動したい場合などに使います。
上記の方法を参考にして、フック機能でユーザー設定ファイルを読込むようにしてみます。
まず、CodeIgniterの設定ファイル
/application/config/config.php
の中で、フック利用の設定項目を
#code(php){{
$config['enable_hooks'] = TRUE;
}}
と設定する。
フックの設定ファイル
/application/config/hooks.php
の中で、フックの動作を
#code(php){{
$hook['pre_controller'][] = array(
'class' => 'Include_hook', 'function' => 'index', 'filename' => 'include_hook.php', 'filepath' => 'hooks'
);
}}
と設定する。
上記の設定内容に合わせて、フックの動作ファイル
/application/hooks/include_hook.php
を作り、以下の内容を記述する。
#code(php){{
?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Include_hook
{function index() { include_once(FCPATH.'user_config.php'); }}
?>
}}
ユーザー設定ファイル「user_config.php」を設置する場所は、
CodeIgniterのindex.phpがあるディレクトリ内
にする。
ユーザー設定ファイル「user_config.php」の内容は、以下のように記述する。
#code(php){{
?php
$email = 'webmaster@mydomain.com';
$db_hostname = 'localhost';
$db_username = 'username';
$db_password = 'password';
$db_database = 'database';
define('EMAIL', $email);
define('DB_HOSTNAME', $db_hostname);
define('DB_USERNAME', $db_username);
define('DB_PASSWORD', $db_password);
define('DB_DATABASE', $db_database);
?>
}}
=必要に応じて、設定内容を決めてください。
最初から
define('CONST', 'value');
という書式で設定したいが、「=」で結んだ方が直観的に分かりやすいと思ったので、
ユーザーが書き換える部分は、
変数 = 値
という書式にした。
その下で、defineで定数に書き換えている。…冗長ですねw
データベースの設定ファイル
/application/config/database.php
を、以下のように書き換える。
#code(php){{
$db['default']['hostname'] = DB_HOSTNAME; // 'localhost';
$db['default']['username'] = DB_USERNAME; // '';
$db['default']['password'] = DB_PASSWORD; // '';
$db['default']['database'] = DB_DATABASE; // '';
}}
「user_config.php」で設定したMySQLの接続情報の定数を使用するように変更した。
上記の例だと、EMAILという定数によって、サイト管理者のメールアドレスを呼び出せます。
要は、user_config.phpでグローバルな定数を指定しておけば、CodeIgniter内のどこからでも利用できるので便利だ!ということです。
CodeIgniterのフック機能を使った外部ファイルの読込みは、これでいいのでしょうか?
セキュリティーの脆弱性や、もっと良い方法があればお知らせください。
よろしくお願いします。m(__)m