- 2006-10-05 (木) 0:50
- PHP
include_pathを設定する方法には、大きく分けて2通りあります。設定ファイル(php.ini/httpd.conf/.htaccess等)に記述する方法とPHPソースに記述する方法です。
記述例
設定ファイルに記述
; php.ini include_path = ".:/usr/local/lib/php/pear" ; httpd.conf / .htaccess php_value include_path ".:/usr/local/lib/php/pear"
PHPソースに記述
< ?php
$lib = dirname(dirname(__FILE__)) . "/lib";
// PHP4.3.0以降
set_include_path(get_include_path() . PATH_SEPARATOR . $lib);
// 全バージョン対応
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . $lib);
?>
				
どちらの方法でも動作はしますが、どちらがより良いか考えてみました。
記述方法
それぞれの利点・欠点を挙げてみました。
| 設定ファイル | PHPソース | |
|---|---|---|
| 良い点 | ・設定項目がまとまっているので把握しやすい。 ・ソースと設定を分離できる。 | ・動的に記述できる。 ・環境に依存せず動作する。 | 
| いまいちな点 | ・固定値しか設定できない。(動的に変更できない。) ・影響範囲が大きいので局所的な設定には不向き。 ・httpd.conf/.htaccessの設定はCLI環境では反映されない。 | ・他のソースから読み込まれると影響範囲が把握し辛い。 ・ソース内に混在する。 | 
どちらにも一長一短があります。
記述場所
各記述場所は以下のとおりです。並びは設定の影響範囲順になっています。(下にいくほど影響範囲が狭くなっています。)
| 記述方法 | 記述場所 | 要root権限 | 環境依存 | 
|---|---|---|---|
| 設定ファイル | php.ini | ○ | – | 
| 設定ファイル | httpd.conf | ○ | – | 
| 設定ファイル | .htaccess | – | ○ httpd.confで使用禁止になっている場合がある。 | 
| PHPソース | インクルードファイル 各ソースで読み込む共通ソース。 | – | – | 
| PHPソース | 単一のソースファイル | – | – | 
これを見るとどんな環境でも使えるのはやはりPHPソースですね※1。特にソースを配布する場合はPHPソースに記述する方が使用する側は手間がかからなくて良いです。
どちらが良いか
記述場所で考えると設定ファイルは制限があるように見えますが、私が普段携わっている案件ではphp.ini/httpd.confを(直接的にせよ間接的にせよ)触れる事がほとんどですし、もし触れない場合でも.htaccessが使えるようにしてもらえば特に問題無いかと思います。(.htaccessすら設定できない環境向けに開発する方が珍しいかと)
include_pathはJavaのclasspathと同じような感覚で捉えているので、ソースには書かず設定ファイルに書く方がしっくりきます。またmbstringやらmod_rewriteやら設定する事が多いので、それらと同じところに書いておけば設定を把握しやすいです。
実際の記述ですが、php.iniはデフォルトのまま or PEARディレクトリのみ記述。httpd.conf/.htaccessにサイト(ディレクトリ)共通設定を記述。これで基本的には終了です。CLIなどでPHPソース単体で設定が必要な場合のみソース内に記述するようにしています。
ただし上記で少し触れたようにソース配布を前提とした場合はソースに書くのもありだと思います。(もちろんその場合も共通ファイルを作成し、各スクリプトからはそれを読み込む形にした方が良いでしょう。)
※1もちろんdisable_functionsで無効になっている場合は別ですが。
- Newer: Google Code Search-ソースコード検索サイト
- Older: A4用紙を手軽に三つ折りする方法
トラックバック:0
- このエントリーのトラックバックURL
- /blog/2006/10/php_include_path.html/trackback
- Listed below are links to weblogs that reference
- include_pathかset_include_path()か from Shin x blog



