Home > PHP > include_pathかset_include_path()か

include_pathかset_include_path()か

  • 2006-10-05 (木) 0:50
  • PHP
この記事の所要時間: 411

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で無効になっている場合は別ですが。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/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

Home > PHP > include_pathかset_include_path()か

検索
フィード
メタ情報

Return to page top