いつもお世話になっております。
Windows環境で開発したPHPアプリをCentOS環境に移行しようとしているのですが、
件名のとおり、PHPのrequireの動作がWindowsとCentOSで違うことから、
原因を調べております。お知恵を拝借したいと思います。
例えば、以下の構成で親プログラム(myApp.php)から子(myparts/main.php)を読み込もうとしています。
ドキュメントルート/test/myApp.php
ドキュメントルート/parts/mypartsA/main.php
●myApp.php
<?php
echo ("##### myApp is starting now !!! </br>");
require_once('/parts/mypartsA/main.php');
?>
●mypartsA/main.php
<?php
echo ("#### mypartsA is required </br>");
?>And myApp.php and mypartsA/main.php are in following structure.
結果として、
●Windowsでは、以下が表示されますが・・・
##### myApp is starting now !!!
#### mypartsA is required
●CentOSでは、以下のとおりエラーになります。
PHP Warning: require_once(/parts/mypartsA/main.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: No such file or directory
in /var/www/html/test/myApp.php on line 12
PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]: Failed opening required (/parts/mypartsA/main.php’(include_path='.:/php/includes:/usr/share/pear:/usr/share/pear/PEAR:/var/www/html') in /var/www/html/test/myAPP.php on line 12
解決策として、以下のようにすればエラーが解消することは分かっているのですが・・・
require_once($_SERVER['DOCUMENT_ROOT']./parts/mypartsA/main.php);
なるべく既存のアプリに手を入れたくないので、
何故Windowsではできて、何故CentOSではできないのかを知りたいと思います。
とりあえず、PHP.iniのinclude_pathを調べてみましたが、
表記方法の違いはあるものの、に意味的な違いが見つかりません。
●Windowsでの設定
.;C:\PHP;C:\PHP\pear;C:\Apache2.2.22\htdocs
●CentOSでの設定
.:/php/includes:/usr/share/pear:/usr/share/pear/PEAR:/var/www/html
この他何をポイントに調べていったらよいか教えていただければと思います。
よろしくお願いします。
No.2
- 回答日時:
include_pathの設定をするか、自ファイルの近くに置いて相対パスでrequireするのが妥当
No.3
- 回答日時:
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は期待どおりに動いていないことが不思議で質問させていたきました。
No.4ベストアンサー
- 回答日時:
>親ディレクトリはその上の/(ドキュメントルート)
No1回答者さんの記述にもあるけど、/ 開始のルート解釈が違います。
マニュアルuser note に windows IISの場合 / 開始のファイルを virtual host のトップ開始と解釈するとある。
http://jp2.php.net/manual/ja/function.include.ph …
しかし、windows apache だと、/始まりの時は、include_path から探す。(xampp1.7 で include_path にドキュメントルート以外のみ登録して検証、登録されていないドキュメントルート下のファイルには、/ 開始では読み込みできないが、include_path内のファイルには、/ 開始で読み込みできた)
linux系列OS だと、/ 開始は、サーバー本体のルートから探しに行く。
ということで、
今回の場合は、include_pathが記述の通りなら parts/mypartsA/main.php とするか、 ../parts/mypartsA/main.php を指定することで、どのOSでもドキュメントルート以下が同じ構成なら動く。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP グローバルスコープはありますか? 1 2022/08/08 19:28
- PHP ECCUBE4のページ管理でPHPを実行させたい 1 2023/04/06 11:42
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こちらはただの直列処理ですか?
-
シェルスクリプトからphpファイ...
-
別ファイルの変数を呼び出した...
-
別PHPファイルに変数を渡す
-
入力フォームの空白や改行を制...
-
phpのソースコードが、そのまま...
-
phpのプログラムエラー
-
#!/usr/local/bin/phpはどこに...
-
MySQLの配置が変わったため、db...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
form actionで二つ送信先を指定...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
存在しないメールアドレスかど...
-
.htaccessにphp_valueが使用できな
-
PHP8を使うと、大量のWarningが...
-
PHPでfatal errorが出ても無視...
-
アップロード画像数でCSSを分け...
-
Apacheでhttp://localhost/が表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの変数を呼び出した...
-
MySQLの配置が変わったため、db...
-
入力フォームの空白や改行を制...
-
別PHPファイルに変数を渡す
-
シェルスクリプトからphpファイ...
-
phpのソースコードが、そのまま...
-
include先でのinclude元の変数...
-
phpinfo.phpを開くとファイルの...
-
拡張子php画像をbmp画像等に変...
-
PHPから別なPHPへ移動(?)する方法
-
PerlからPHPの呼び出しについて
-
1行目の#! "C:\\xampp\\php\\p...
-
ローカルでは動くがサーバーで...
-
PHPの拡張子を見せない方法
-
パスワード等が記述されているp...
-
#!/usr/local/bin/phpはどこに...
-
.htaccessの設定で,auto_prepe...
-
PHP(.php)及びJavascrpit(.j...
-
.phpのファイルを開けない!
-
拡張子なしのファイルを稼働さ...
おすすめ情報