2

重複の可能性:
PHP: ファイルを含む別のディレクトリからファイルをインクルードすると、なぜこのような奇妙な動作になるのですか?

インクルード ファイルを含むファイルをインクルードする際に問題があります。

  • core.inc.php パス:www/test/includes/core.inc.php

  • core.inc.php に含まれるファイル: include_once ('../../connectdb.php');

  • connectdb.php パス:www/connectdb.php

  • index.php パス:www/test/index.php

  • index.php に含まれるファイル:include_once ('included/core.inc.php');

index.php を実行すると、次の警告が表示されます。

(!) Warning: include_once(../../connectdb.php): failed to open stream: No such file or directory in G:\wamp\www\test\includes\core.inc.php on line 7

(!) Warning: include_once(): Failed opening '../../connectdb.php' for inclusion (include_path='.;C:\php\pear') in G:\wamp\www\test\includes\core.inc.php on line 7

含まれるパスを動的に変更するためのベストプラクティスは何ですか? 私の問題で私を助けてください。ありがとうございました。

4

3 に答える 3

4

__DIR__このような問題を回避するには、現在のファイルのディレクトリに置き換えられるPHP マジック定数を使用できます。

例えば:

include_once(__DIR__ . '/relative/path/to/file-to-include.php'); 

__DIR__PHP 5.3 以降でのみ使用できることに注意してください。__DIR__そのバージョン以下で置き換えることができますdirname(__FILE__)

ところで、オートローディングは混乱を避けるための良い習慣です。

于 2013-01-23T08:41:08.823 に答える
1

に含まれるファイルindex.php:include_once ('./includes/core.inc.php');

于 2013-01-23T08:39:09.323 に答える
0

core.inc.php を指す index.php の相対パスは、単純に間違っています。

あなたはこう言っています: 「index.php の場所から、ディレクトリの上に、そこにあります。」しかし、「www」ディレクトリに「core.inc.php」というファイルはありません。

正しいパスは「includes/core.inc.php」です。現在のディレクトリ「www/test」から 1 つ上のディレクトリを「includes」に移動すると、そこにあります。

__DIR__使用または魔法の定数についての言及__FILE__も機能しますが、これは別のアプローチです。相対追加を使用してファイルへの絶対パスを作成します。同じように動作しますが、より複雑に見えます。

クラスを使用している場合は、オートローディングを実装してみてください。次に、ファイルを明示的に含める必要はなく、単にクラスを使用します。

于 2013-01-23T09:11:21.583 に答える