3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(PHP)include_pathを本番環境、開発環境で切り替える

PHPで共通に使う外部ファイルを読み込ませたい時、絶対パス指定で require_once をする時が多いと思います。

(ディレクトリ階層が異なる場合や、インクルード先からさらに別ファイルをインクルードしている場合には絶対パスの方が無用なトラブルを避けれるので。。)

しかし、本番環境とローカルの開発環境では絶対パスが異なることが多々有ります。

いちいち各PHP内のファイルを本番にアップする前に置換したりするのは非常に手間です。

で、いい方法はないか探していると、include_path:とことん!ホームページに役立つ方法が。。。

そういう時に以下にようなスクリプトを各PHPの最初に実行するようにしておけばいいようです。(Smartyのライブラリをincludeする例です)

/**

* PHPのinclude_pathを設定。

* 本番環境、テスト環境を切り分ける。

*/

function IncludePathSetting(){

if ($_SERVER['SERVER_NAME']=='www.hoge.exsample' ){

//本番環境

$path = '/usr/home/hoge/smarty/libs/';

} else {

//リモートホスト

$path = 'D:/mydoc/hogeproject/smarty/libs/';

}

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

}

ちなみに、include_pathがうまく設定できてなかったり、パス指定が間違っていると、以下のようなエラーがでます。

Warning: require_once(Smarty.class.php) [function.require-once]: failed to open stream: No such file or directory in D:\hoge.jp\html\test.php on line 20

Fatal error: require_once() [function.require]: Failed opening required 'Smarty.class.php' (include_path='.;C:\php5\pear;D:\hoge.jp\html\') in D:\hoge.jp\html\test.php on line 20

参考:

codeなにがし::require_once で相対パスを使うと・・・:

基本的なインストール | Smarty:

PHP の include, require で相対パスを指定して読み込む場合のメモ