-1

次のエラーを取得する

'./admin/main.inc' をインクルードするために開けませんでした (include_path='.:/usr/local/php5_3/lib/php')

インクルードのあるファイルは/adminディレクトリにあります。私が試した他の2つのホスティングでは同じサイトが正常に機能しますが、その1つ(godaddy)では機能せず、エラーがスローされます。パスを変更する../admin/main.incと機能しますが、スクリプトに含まれるすべてのファイルを変更する余裕がないため、ここで助けを求めています。その問題を解決するように教えていただければ、または少なくともサポートに何を伝えれば解決できるでしょうか?

私がインターネットで見つけたのは、「ホスト上のPHPは、現在のディレクトリを含めるように構成されていません」ということだけでした

アップデート:

さて、うまくいきましたが... これが状況です。/admin という名前のフォルダーには、index.php と forget.php (パスワードを忘れた場合) があります。両方のファイルに /admin/main.inc が含まれています ここに index.php が含まれています

`include_once "../admin/main.inc";`

ここにforget.phpインクルードがあります

`include_once "./admin/main.inc";`

1 つのファイルが ../ を使用し、別の ./ を使用し、両方に同じファイルが含まれていることがわかります。こちらmain.inc

`session_start();
require_once '../class/class_db.php';
require_once '../class/class_wwf.php';
require_once '../class/class_other.php';
require_once '../admin/class/class_auth.php';`

したがって、このままの場合、index.php は正常に動作しますが、forget.php はインクルードに失敗し、そのようなファイルはありません...

main.inc を ./ index.php を使用するように変更すると、動作が停止し、forget.php が動作します...

4

2 に答える 2

2

その問題を解決するように教えていただければ、または少なくともサポートに何を伝えれば解決できるでしょうか? 私がインターネットで見つけたのは、「ホスト上のPHPは、現在のディレクトリを含めるように構成されていません」ということだけでした

まず最初に、あなたが直面していることの説明: あなたのインクルードは または のいずれ./かで始まります../。これらのインクルードのパスは、現在の作業ディレクトリに相対的です。

これは通常、要求されている php ファイルが存在するディレクトリですが、技術的にはこれは独立しています。

したがって、技術的には、ここに作業ディレクトリの隠れた依存関係があります。インクルード パスを変更したくない場合は、作業ディレクトリを変更します。

ただし、通常は、複数のファイルを検索して置換し、先頭をで置き換える方が簡単です./。これは、現在のファイルのディレクトリを表す魔法の定数であり、作業ディレクトリの設定に依存しません。__DIR__ . '/__DIR__


私がインターネットで見つけたのは、「ホスト上のPHPは、現在のディレクトリを含めるように構成されていません」ということだけでした

これは通常、別のことを意味しますが、実際には、ホストではそうではありません。ホストで、現在のディレクトリを含めるように構成されています。

... include_path='.:/usr/local/php5_3/lib/php'

インクルード パスの最初のドット、現在の作業ディレクトリです。

于 2013-08-31T23:13:14.800 に答える
0

.. で動作する場合は、デフォルトのインクルード パスを親ディレクトリで動的に拡張できます。

set_include_path(get_include_path() . PATH_SEPARATOR . '../');

(これは include ステートメントの前にある必要があり、できればスクリプトの最初のどこかにあり、php はこのディレクトリを読み取る権限を持っている必要があります。)

編集: ファイル名の先頭にある ./ はこれを効果的にブロックしているように見えるので、次を試すことができます:

set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__DIR__));

... またはインクルード ファイル名からすべての ./ を削除すると、アプリケーションはこれらがなくても動作するはずです。

于 2013-08-31T23:21:01.383 に答える