- ベストアンサー
WindowsとCentOSでのPHPの動作
- Windows環境とCentOS環境でのPHPの動作に違いがある。
- Windows環境では正常に動作しているが、CentOS環境ではエラーが発生する。
- include_pathの設定に違いがあるため、エラーが発生している可能性がある。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>親ディレクトリはその上の/(ドキュメントルート) No1回答者さんの記述にもあるけど、/ 開始のルート解釈が違います。 マニュアルuser note に windows IISの場合 / 開始のファイルを virtual host のトップ開始と解釈するとある。 http://jp2.php.net/manual/ja/function.include.php#94392 しかし、windows apache だと、/始まりの時は、include_path から探す。(xampp1.7 で include_path にドキュメントルート以外のみ登録して検証、登録されていないドキュメントルート下のファイルには、/ 開始では読み込みできないが、include_path内のファイルには、/ 開始で読み込みできた) linux系列OS だと、/ 開始は、サーバー本体のルートから探しに行く。 ということで、 今回の場合は、include_pathが記述の通りなら parts/mypartsA/main.php とするか、 ../parts/mypartsA/main.php を指定することで、どのOSでもドキュメントルート以下が同じ構成なら動く。
その他の回答 (3)
- mpro-gram
- ベストアンサー率74% (170/228)
document_rootが php.ini のinclude_path に登録されているなら、先頭の / を削るだけで、windowsでもlinuxでも動作するはず。本来先頭の / 無し記述で、include_path 内のファイルを指定するとマニュアルにある。 http://jp.php.net/manual/ja/function.include.php
お礼
ありがとうございます。
補足
パスを指定した場合は、include_path は無視されます。と書いてありますね。 続けて、たとえば ../ ではじまるファイル名を指定した場合は、 親ディレクトリからそのファイルを探します。とも書いてあります。 私のアプリケーションの場合、myApp.phpというプログラムを最初に動かしているので、カレントディレクトリがtestで、親ディレクトリはその上の/(ドキュメントルート)だと思っていました。 つまり、親ディレクト(この場合はドキュメントルート)から、parts/mypartsAとたどって、main.phpを探し当てることを期待したわけですが、Windowsはこの期待どおり動くにに対し、CentOSは期待どおりに動いていないことが不思議で質問させていたきました。
- yambejp
- ベストアンサー率51% (3827/7415)
include_pathの設定をするか、自ファイルの近くに置いて相対パスでrequireするのが妥当
お礼
ありがとうございます。
- saintandre
- ベストアンサー率31% (194/607)
CentOSというかLinux全般では先頭の「/」はシステムのルートディレクトを指定しますので それで参照がうまくいっていないのだとおもいます。 先頭の「/」を外すかカレントディレクトリをあらわす「./」を使用して require_once('parts/mypartsA/main.php'); もしくは require_once('./parts/mypartsA/main.php'); のように記述してみてください。
お礼
ありがとうございます。
お礼
やはりOSによって違う振る舞いをするようですね。腹をくくって既存のアプリを修正することにします。 ありがとうとございました。