0

次のようなファイルがいくつかあります。

index.php:

<?php  
include('includes/header.php');

...

インクルード/header.php:

<?php
include('config.php');

...

私が得るエラーは

警告: require(config.php) [function.require]: ストリームを開けませんでした: No such file or directory in [dir]/includes/header.php on line 2
Fatal error: require() [function.require]: Failed 2 行目の [dir]/includes/header.php で必要な「config.php」(include_path='.:/usr/share/pear:/usr/share/php') を開く

さらにデバッグを行いました:呼び出しを追加するとき

system('pwd');

includes/header.php には、[dir]/includes と表示されるべき場所に [dir] が表示されます。インクルード パスに「includes/」を追加すると機能しますが、運用サーバーでは失敗するため、望ましくありません。

上記のコードは実稼働サーバーで動作し、Fedora サーバーのドキュメント ルートがマウントされた CIFS 共有になるように開発環境を変更しようとするまで、私の開発 Fedora サーバーで正常に動作しました。

何か案は?ありがとう。

4

3 に答える 3

0

FedoraサーバーのドキュメントルートがマウントされたCIFS共有になるように開発環境を変更しようとするまではうまくいきました。

SELinux は有効になっていますか?

小切手/var/log/audit/audit.log

SELinux が有効で強制モードになっており、干渉していることに賭けます。

于 2010-06-12T02:49:28.803 に答える
0

言いたくないのですがpwd、あなたが説明している動作は100%予想される動作です(少なくともPHP4以降...おそらくそれ以前)。

PHP は、現在の作業ディレクトリ (pwd によって使用される) を自動的に ONCE に設定します。PHP はそれを変更しません。したがって、 。chdir() で手動で変更しない限り、元の現在の作業ディレクトリを参照します。

この問題にはさまざまな解決策が使用されています。そのほとんどは、必要な PHP インクルード ファイル戦略で確認できます。

以前に機能していた場合は、おそらくどこかで include_path の更新があったか、作業ディレクトリを変更したコードが変更されなくなったか、またはこの奇妙な (しかしより期待される) 動作を実装した使用した PHP バージョンが変更されなくなりました。

とにかく、インクルード パスを確認します。ini ファイル、またはインクルード パスを変更するスクリプトです。include_path を更新するために使用された何かを推測していますが、現在は更新されていません。

移動方法の詳細についてはわかりませんが、.htaccess が auto_prepend_file を Web サイト構造の完全に外側にあるファイルへのハードコードされたパスに設定し、インクルード パスを設定する (とりわけ) Web 構造内のどこかに。

于 2010-06-12T04:28:23.777 に答える