0

これらは私の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.phpmypartsA/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年間動作しています。partsPHPはディレクトリを正しく見つけることができます。

同じ人が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
4

1 に答える 1

0
$path = realpath(dirname(__FILE__)) . "/../../parts/mypartsA/main.php";
require_once($path);

このパスで試してください

$path = "../parts/mypartsA/main.php";

2番目のパスはドキュメントルートで機能するはずです。

于 2013-03-21T05:00:02.277 に答える