これらは私のPHPアプリケーションmyApp.php
とのコードです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>");
?>
そしてmyApp.php
、mypartsA/main.php
次のような構造になっています。
Document_root
|
+--- test
| |
| +--- myApp.php
|
+--- parts
|
+--- mypartsA
|
+---main.php
このアプリケーションをWindows+Apacheで1年間問題なく使用しましたが、最近これをCentOS + Apacheに移行すると、以下に関連する致命的なエラーが発生します。include_path
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
PHP.netによると、パスが定義されている場合、include_pathは無視されます。 http://www.php.net/manual/en/function.include.php
私の場合、PHPはからparts
ディレクトリを検索しようとするC:\
か/
どうかを考えますinclude_path
。
require_once(/parts/mypartsA/main.php);
したがってmyAPP.php
、WindowsでもCentOSでも、の結果は致命的なエラーになるはずです。
しかし、私のアプリケーションは、Windowsでエラーなしで1年間動作しています。parts
PHPはディレクトリを正しく見つけることができます。
同じ人がWindowsで上記のコードを試してみてください。
##### myApp is starting now !!!
#### mypartsA is required
またはエラーが発生しますか?
ここで、同じコードの結果がWindowsでの実行とCentOSでの実行で異なる理由を知りたいと思います。
PHP.iniのどの方向をチェックする必要がありますか?
このコードを変更して絶対パスを追加するかどうかはわかります$ _SERVER['DOCUMENT_ROOT']
。
require_once($_SERVER['DOCUMENT_ROOT']./parts/mypartsA/main.php);
それはうまくいくでしょう。しかし、同じスタイルのコーディングを持つアプリケーションはたくさんあり、それらすべてを変更したくありません。
これらは追加情報です。
include_pathの値phpinfo()はWindowsで表示されます
.;C:\PHP;C:\PHP\pear;C:\Apache2.2.22\htdocs
include_pathの値phpinfo()はCentOSで表示されます
.:/php/includes:/usr/share/pear:/usr/share/pear/PEAR:/var/www/html