人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ApacheのDocumentRoot配下に2つのディレクトリを作成し、それぞれにPHPサイトの構築を検討しています。
それぞれのサイトの処理はほとんど同じなのですが、requreで読み込まれる処理とDBの参照先を変えることで異なるサービスを実現しようとしています。

そこで質問ですが、これを実現するために、それぞれのサイトのrequireの参照先を変えたいのですが、うまくいきません。
PHP.iniのinclude_pathでは共通設定なのでそれぞれのサイトの参照先を変えることができませんし、それぞれのサイトのディレクトリ配下に.htaccessを設置してもrequireの指定ファイルを読み込むことができませんでした。

方法について、みなさんのお知恵をお借りしたいと思いますので、よろしくお願いいたします。

●質問者: cochoo
●カテゴリ:ウェブ制作
✍キーワード:.htaccess Apache DB PHP require
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● rouge_2008
●25ポイント

以下のような記述を.htaccessに記述したのでしょうか?

http://www.iyahooi.com/entry/2008/04/htaccessphp.html

「set_include_path()」でPHPファイルに記述するのはいかがでしょうか?

http://kezy.org/2009/07/19/php-include-path

サイト1には

$path = /home/user/www/lib1/";
set_include_path($path . PATH_SEPARATOR . get_include_path());

サイト2には

$path = /home/user/www/lib2/";
set_include_path($path . PATH_SEPARATOR . get_include_path());

・・・のように記述すれば大丈夫ではないかと思います。

※どちらも優先順位は、記述した順番になります。

※カレントディレクトリが一番優先されますので、読み込むファイルはカレントディレクトリ以外のディレクトリに置く必要があります。


※コメント欄を開けて置いた方がやり取りがしやすいと思います。

◎質問者からの返答

遅くにご回答いただきありがとうございます。

対象サーバはUNIXですので、ご指摘の通りで.htaccessを記述してあります。

できれば、PHPファイルには手を加えずに実現したいのですが、どうしてもうまくいきません。

たとえば、私の環境で、DocumentRoot配下にtest1とtest2というフォルダを作成し、ぞれぞれに、

test1/.htaccess

test1/t1.php

test2/t2.php

を作り、

.htaccessには、php_value include_path ".:../test2"

t1.phpには、

t2.phpには、

としたのですが、t1.phpを実行するとApacheは、PHP.iniのinclude_pathのみを参照し、t2.exeは存在しないエラーが表示されます。

なお、httpd.confをDocumentRootを"AllowOverrice All"に設定しており、何が原因が不明です。

もしよろしければ、PHPファイルを編集せずに対応したいのですが、

対策をご存知であれば、よろしくお願いいたします。


2 ● hnagoya
●25ポイント

たとえば DocumentRoot が /var/www だとして

/var/www/a/index.php

/var/www/b/index.php

の各々で require するファイルのパスを独立に指定できない、というようなことでしょうか。

だとすると「うまくいきません」というのが腑に落ちないのですが…何も考えずに require('/var/local/a/lib/php') とか書けばうまくいくように思います。


それはさておき、どうやってもある特定のファイルしか require できない、ということであれば、その共通で require するファイル内で、たとえば $_SERVER[XXX] の値によって処理を分岐させればよいのではないかと思います。

XXX は PHP_SELF, SCRIPT_NAME, REQUEST_URI あたりが使えるのではないかと。

http://www.php.net/manual/ja/reserved.variables.server.php

◎質問者からの返答

ご回答いただきありがとうございます。

説明不十分で申し訳ありません。

実現したいのは、

/var/www/a/index.php … ?

/var/www/b/index.php … ?

で、index.phpの処理を変えずに、外部の設定(php.iniか.htaccess)だけで、?と?のrequireの参照先を変えたいということです。

「うまくいきません」という意味は、違う設定のphp.iniや.htaccessを/var/www/aと/var/www/bにおいても、それは認識されず、PHP本体があるphp.iniのinclude_pathだけを参照してしまうため、?と?のrequire参照先を変えることができなかったということです。

たとえば、設定は以下のように行っています。

/var/www/a/php.ini → include_path ".:/var/www/a_lib"

/var/www/b/php.ini → include_path ".:/var/www/b_lib"

/var/www/a/.htaccess → php_value include_path ".:/var/www/a_lib"

/var/www/b/.htaccess → php_value include_path ".:/var/www/b_lib

他の文献やサイトをみると、php.iniや.htaccessは任意のフォルダに設置できると書かれてあったので、なぜ目的の動作を実現できないのか悩んでいます。

この件について、ご助言をいただけると幸いです。よろしくお願いいたします。


3 ● hnagoya
●30ポイント ベストアンサー

回答者2です。以下は apache + mod_php (サーバーモジュール)前提ですが


1. php.ini は httpd の起動時に1回だけ読み込まれるそうなので、スクリプトの実行毎に独立指定というのは仕様上無理ではないかと思います。

http://www.php.net/manual/ja/configuration.file.php


2. .htaccess であればスクリプトの実行毎での指定が可能だそうなので、こちらがご希望に沿う話だと思います。

http://www.php.net/manual/ja/configuration.file.per-user.php

http://www.php.net/manual/ja/configuration.changes.php


3. 手元の Linux マシン(Debian lenny + apache2 + PHP5)で試してみたところでは 2 でご希望の動作をしていることが確認できました。

具体的には各ディレクトリ直下の index.php の中身を echo phoinfo() とし、.htaccess には php_value include_path ... を記載して

http://.../a/index.phphttp://.../b/index.php の表示をチェックしましたところ Local Value が .htaccess での指定に変更されていました。


4. ということで、cochoo さんのお手元でうまくいかない理由は残念ながらわからないのですが

あたりを念のため再チェックしてみてはいかがでしょうか。

◎質問者からの返答

ご回答ありがとうございます。

まず、PHP.iniに関してはapacheの再起動が必要ですが、各ディレクトリ(Local Value)に設置されたPHP.iniの設定が各ディレクトリで認識されることを確認できました。

.htaccessに関しても問題なく期待通りの動作を確認できました。

結局、原因がわからずじまいなのですが、hnagoya様から1回目のご回答をいただいたときはinclude_pathが認識されていませんでした。

現状は、include_pathが認識されていますので、これで質問を終了したいと思います。

ただし、hnagoya様からの情報で、PHP.iniと.htaccessの設定方法が明確となりましたので、昨日の根本原因はそれ以外の環境問題と切り分けすることができました。もし、今後問題が再発したのであれば、PHP.iniや.htaccess以外のところを優先的に調べたいと思います。

また、PHP4とPHP5では.htaccessの設定を分けることと、phpinfo()のLocal valueの意味合いがわかりました。

いろいろとお調べいただいて本当にありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ