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

#contents

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

* 外部ファイルの読込み [#a207ca58]

-ユーザーの設定ファイルを「application」フォルダの外に置いて、CodeIgniterで呼び出したい。
-「application」フォルダの外に置いてあるPEARライブラリを呼び出したい。 
等の用途で、CodeIgniterでシステムの外部に置いてあるファイルを読込むようにするにはどうしたら良いだろうか?

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

- CodeIgniterでPEARなどの外部ライブラリを使う|CodeIgniter|CSSテンプレートガイド
http://csstemplate.blog.shinobi.jp/Entry/289/

CodeIgniterのフック機能の使い方
-フック : CodeIgniter ユーザガイド 日本語版
http://codeigniter.jp/user_guide_ja/general/hooks.html

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

* フック機能を利用した外部ファイルの読込み [#g7bc66e5]
上記の方法を参考にして、フック機能でユーザー設定ファイルを読込むようにしてみます。

** フック機能を有効にする [#fc1b0a6f]
まず、CodeIgniterの設定ファイル
 /application/config/config.php
の中で、フック利用の設定項目を
#code(php){{
$config['enable_hooks'] = TRUE;
}}
と設定する。

** hooks.phpの設定 [#lb1c6d5a]
フックの設定ファイル
 /application/config/hooks.php
の中で、フックの動作を
#code(php){{
$hook['pre_controller'][] = array(
	'class' => 'Include_hook',
	'function' => 'index',
	'filename' => 'include_hook.php',
	'filepath' => 'hooks'
);
}}
と設定する。

** include_hook.phpの設置 [#jdf8f41e]
上記の設定内容に合わせて、フックの動作ファイル
 /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');
	}
}
?>
}}

-「FCPATH」という定数は、CodeIgniterのフロントコントローラー(index.php)が存在するディレクトリを示している。
(=CodeIgniterのindex.php内で定義されている定数)
-設置するユーザー設定ファイルの名前は「user_config.php」にしてある。
-「user_config.php」は、CodeIgniterのindex.phpと同じディレクトリに置く。
(=ユーザー設定ファイルは、深い階層に置くのではなく、見つけやすい場所に置いて、設定作業をしやすくしたい。)

** user_config.phpの設置 [#gef0f750]
ユーザー設定ファイル「user_config.php」を設置する場所は、
 CodeIgniterのindex.phpがあるディレクトリ内
にする。

ユーザー設定ファイル「user_config.php」の内容は、以下のように記述する。
#code(php){{
<?php
// 設定はここから ------------------------

// e-mail of webmaster
$email = 'webmaster@mydomain.com';

// config of MySQL
$db_hostname = 'localhost';
$db_username = 'username';
$db_password = 'password';
$db_database = 'database';

// 設定はここまで ------------------------

//----------------------------------------
// define constants
//----------------------------------------
define('EMAIL', $email);
define('DB_HOSTNAME', $db_hostname);
define('DB_USERNAME', $db_username);
define('DB_PASSWORD', $db_password);
define('DB_DATABASE', $db_database);
?>
}}
=必要に応じて、設定内容を決めてください。

*** defineで定数にする [#tc14758b]
最初から
 define('CONST', 'value');
という書式で設定したいが、「=」で結んだ方が直観的に分かりやすいと思ったので、
ユーザーが書き換える部分は、
 変数 = 値
という書式にした。
その下で、defineで定数に書き換えている。…冗長ですねw

** データベースの接続設定 [#of0a0e72]
データベースの設定ファイル
 /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の接続情報の定数を使用するように変更した。

** その他 [#z4fbbc82]
上記の例だと、EMAILという定数によって、サイト管理者のメールアドレスを呼び出せます。

要は、user_config.phpでグローバルな定数を指定しておけば、CodeIgniter内のどこからでも利用できるので便利だ!ということです。

* よろしくね! [#c1d1b216]
CodeIgniterのフック機能を使った外部ファイルの読込みは、これでいいのでしょうか?
セキュリティーの脆弱性や、もっと良い方法があればお知らせください。
よろしくお願いします。m(__)m

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS