意外と面倒
root権限があれば好きなように設定できるのですがレンタルサーバなどでは、設定方法が限られてきます。よく使うinclude pathの通し方法を紹介します。
ini_set()関数を使う
[main.php]/* 外部参照ファイルパスの指定 */ ini_set("include_path",".:/www/study/include"); /* =-=- モジュール等の読み込み -=-= */ require_once('rkt_db.php'); RSL_db::output();
[rkt_db.php]
/* =-=- モジュール等の読み込み -=-= */ require_once('sqlite_db.php'); class RSL_db extends SQLite_db { function RSL_db() { } }
main.phpからrkt_db.phpを読み込みます。
rkt_db.phpでは更にsqlite_db.phpを読み込んでいます。
ini_set()関数は一番底に当たる呼び込み元で一度実行すれば全てのファイルに波及されます。(同じプロセスの間)
rkt_db.phpではini_set()関数を実行していませんがsqlite_db.phpを読み込めます。
PEARなど他人が作成したモジュールを使う場合はファイルを変更しなくて済みます。
移行する場合は大変で、読み込み元の全てのファイルを変更しなければなりません。
開発などでは開発・本番のディレクトリ構成を同一にする必要が有ります。
定義ファイルを用意する
[main.php]/* =-=- モジュール等の読み込み -=-= */ require_once('../config.php'); /* 定義ファイル */ require_once(BASE_DIR.'libs/rkt_db.php'); RSL_db::output();
[config.php]
if (!defined('BASE_DIR')) { define('BASE_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); }
[rkt_db.php]
/* =-=- モジュール等の読み込み -=-= */ require_once(INCLUDE_DIR.'sqlite_db.php'); class RSL_db extends SQLite_db { function RSL_db() { } }
定義ファイル(config.php)はトップディレクトリにある必要があります。
定義ファイル内でBASE_DIRを定義します。
モジュールを読み込む際は必ずBASE_DIRと共に読み込みます。
DIRECTORY_SEPARATORはPHPの定義済み定数です。
一番底に当たる呼び込み元で、相対パスにより定義ファイルを読み込めば開発・本番のディレクトリ構成が違う場合でも問題ありません。
.htaccessを使用する
[.htaccess]<IfModule mod_php4.c>
php_value include_path ".:/www/study/include"
</IfModule>[main.php]
/* =-=- モジュール等の読み込み -=-= */ require_once('rkt_db.php'); RSL_db::output();
[rkt_db.php]
/* =-=- モジュール等の読み込み -=-= */ require_once('sqlite_db.php'); class RSL_db extends SQLite_db { function RSL_db() { } }
この方法を使えば設置したディレクトリ以下に反映されるのでとても便利です。
開発環境に複数のプロジェクトを置いてある場合などはphp.iniを設定せずに済むので混乱することもありません。
問題は.htaccessに制限がある場合は勿論使えません。
AllowOverrideなどがALLであれば問題ないはずです。
逆にALLであることが問題ですか……
