デジットさんの生活便利サイトトップへ デジットさんのPHPのinclude_path

トップページ > ホームページ作成 > PHPのinclude_path

PHPの使い初めは、include_pathの概念がよく解かりません。PEARやSmartyを使う時、実行ファイル毎に相対アドレスを設定するのは大変です。include_pathを自分用に設定すれば、ローカルディレクトリに置いたPEARやSmartyのファイルを相対アドレスを気にしなくとも呼ぶことが出来ます。自分で作った汎用のファイルなどのディレクトリもinclude_pathに追加できます。

「include_path」とは

「include_path」に、require()、include()、 および fopen_with_path() 関数がファイルを 探すディレクトリを指定することが出来ます。指定は、複数のディレクトリを指定できます。すなわち、require()やinclude()したいファイルのディレクトリを指定しておけば、呼び出す時指定したディレクトリからの下層の相対アドレスを指定するだけですみます。指定したディレクトリの中のファイルは、ファイル名だけの指定でOKです。require_once()、include_once()も同様です。

「include_path」の指定方法

include_pathを設定する方法は、大きく分けて2つあります。設定ファイル(php.ini/httpd.conf/.htaccess等)に記述する方法とPHPファイルに直接記述する方法です。レンタルサーバーの場合は、.htaccessファイルしかいじれないことが多いと思いますので、ここでは「.htaccess」の設定方法と、PHPファイルに直接書き込む方法の書き方を説明します。

「.htaccess」の設定方法

レンタルサーバーロリポップの例です。指定したいディレクトリをフルパスで指定します。ここでは、PEAR用の「local_pear/PEAR」と自分で使う汎用ファイル用の「incs」のディレクトリを指定してみました。複数のディレクトリを指定する場合は、UNIXでは コロンで、Windowsではセミコロンで区切ったディレクトリのリスト で指定します。例は、UNIX用です。
最初の「.」は特別な値で、 スクリプトが格納されているワーキングディレクトリをベースディレクトリとして 使用することを意味します。

# PEARのインクルードパスをローカルに設定
php_value include_path
#一つのinclude_pathを設定
#".:/home/sites/lolipop.jp/users/lolipop.jp-dp*******/web/local_pear/PEAR"
#複数のinclude_pathを設定
".:/home/sites/lolipop.jp/users/lolipop.jp-dp*******/web/local_pear/PEAR:/home/sites/lolipop.jp/users/lolipop.jp-dp30094700/web/incs"

PHPファイルに直接書き込む方法

設定ファイルが権限が無くいじれない場合は、PHPファイルに直接include_pathを書き込めます。ここでは、実行ファイルのディレクトリ階層が何処にあっても大丈夫な、汎用的なinclude_path指定方法をお教えします。
「$_SERVER["DOCUMENT_ROOT"]」は、ルートディレクトリのフルパスを返してくれます。そこで、フルパスと追加したいディレクトリ"/incs"を結合して、$pathに代入しました。「set_include_path(get_include_path() . PATH_SEPARATOR . $path)」で元々あるinclude_pathに新しいinclude_pathのディレクトリが追加できます。「get_include_path()」は現在設定されているinclude_pathを読み込みます。「PATH_SEPARATOR」は、UNIXでは コロンで、Windowsではセミコロンを代入してくれます。
「restore_include_path()」は、おまけです。これは、設定されたinclude_pathを「php.ini」で指定されたinclude_pathに戻します。「.htaccess」で設定したパスには戻れませんので、注意してください。
これらの指定は、この実行しているPHPファイルの中だけで有効になります。他のファイルには影響を与えません。

<?php
//ドキュメントルート ディレクトリからinclude_pathを追加する
$path = $_SERVER["DOCUMENT_ROOT"]."/incs";
$inc_path = get_include_path();
echo $inc_path."<br/>";
//include_pathに新しいパスを追加
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
$inc_path = get_include_path();
echo $inc_path."<br/>";
//include_pathをphp.ini でセットされたオリジナルの設定に戻す
restore_include_path();
$inc_path = get_include_path();
echo $inc_path."<br/>";
?>

上記リストを実行した結果は、次の通りです。上記ファイルをどの階層のディレクトリに置いても同じ結果になります。
もともと「.htaccess」で指定していた、「local_pear/PEAR」に「incs」が追加されました。ちなみに、最後の行は、ロリポップの「php.ini」指定パスになります。「PHP」と「Smarty」のinclude_pathが指定されていました。

.:/home/sites/lolipop.jp/users/lolipop.jp-dp*******/web/local_pear/PEAR
.:/home/sites/lolipop.jp/users/lolipop.jp-dp*******/web/local_pear/PEAR:/home/sites/lolipop.jp/users/lolipop.jp-dp*******/web/incs
.:/usr/local/lib/php:/usr/local/lib/php/Smarty

読み込みファイルのinclude_path

PHP実行ファイルからrequire()、include()等で読み出されるファイルは、次の順番で探されます。

  1. include_pathで設定されているディレクトリ
  2. 実行しているファイルのあるディレクトリ
  3. ./ 又は ../ で始まっている場合は、 実行しているファイルのあるディレクトリからの相対パス

更に、require()、include()されたファイル(例えば「inc.php」)の中にrequire()、include()がある場合は、当然上記のディレクトリを探した後に「inc.php」ファイルがあるディレクトリも探します。
これで、include_pathが解かりました。
レンタルサーバーのロリポップでは、動作確認が出来ています。

ホームページを公開するレンタルサーバーは、 ロリポップ! がお薦め、 PHP5を使うならPHP5から選ぼう。

関連ページ

ホームページ作成

PHP5を使う

アフィリエイトをする

PHPの使い方

スポンサード リンク

Amazon.co.jpアソシエイト:
PHP&プログラミング

売れている順 新刊順

:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20php :php2_  :5

とことん!ホームページデジットさんのリストラ日記仮福真琴の精神科医はうそだらけ

2005-2007 Copyright © Digit-01 All Rights Reserved.