CodeIgniter > Tips > 外部ファイルの読込み

前提:以下の説明は、CodeIgniter2.0.1を使用

外部ファイルの読込み

参考

CodeIgniterのフック機能を使って、外部ファイルを読込む方法が紹介されていました。

CodeIgniterのフック機能の使い方

フック機能は、コントローラーがロードされる直前または直後の段階で、ある処理を実行したい場合や、他の段階でユーザ作成のスクリプトを起動したい場合などに使います。

フック機能を利用した外部ファイルの読込み

上記の方法を参考にして、フック機能でユーザー設定ファイルを読込むようにしてみます。

フック機能を有効にする

まず、CodeIgniterの設定ファイル

/application/config/config.php

の中で、フック利用の設定項目を

#code(php){{
$config['enable_hooks'] = TRUE;
}}
と設定する。

hooks.phpの設定

フックの設定ファイル

/application/config/hooks.php

の中で、フックの動作を

#code(php){{
$hook['pre_controller'][] = array(

	'class' => 'Include_hook',
	'function' => 'index',
	'filename' => 'include_hook.php',
	'filepath' => 'hooks'

);
}}
と設定する。

include_hook.phpの設置

上記の設定内容に合わせて、フックの動作ファイル

/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の設置

ユーザー設定ファイル「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で定数にする

最初から

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


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-05 (火) 21:35:52