2

私は次のファイル構造を持っています:

temp
    main
        index.php
    a.php
    b.php

これがファイルです。

index.php

echo "index.php ---> " . __DIR__ . "<br />";

require('../a.php');

echo "OK<br />"

a.php

echo "a.php ---> " . __DIR__ . "<br />";

require('./b.php');

echo "a is here<br />"

b.php

echo "b is here<br />"

index.php呼び出されると、次のエラーが発生しました。

index.php ---> D:\Programs\WampServer 2\www\temp\main
a.php ---> D:\Programs\WampServer 2\www\temp

Warning: require(./b.php) [function.require]: failed to open stream: No such file or directory in D:\Programs\WampServer 2\www\temp\a.php on line 5

Fatal error: require() [function.require]: Failed opening required './b.php' (include_path='.;C:\php5\pear') in D:\Programs\WampServer 2\www\temp\a.php on line 5

変更すると気づきました

require('./b.php');

require('b.php');

何故ですか ?期待どおりに動作します。

4

2 に答える 2

17

includeまたはrequireを使用すると、インクルードするファイルは、それをインクルードしたスクリプトの一部であるかのように機能します。この場合、ファイルa.phpはと同じディレクトリにある可能性がありますがb.php、コードが実行されているときは、のコンテキストで実行されていますindex.php__FILE__ではなくを使用した場合は、でインクルードファイルとして実行されているときと同じ値が返される__DIR__ことがわかります。a.phpindex.phpindex.php

相対パスはファイルの使用場所によって異なるため、サーバールートを基準にした絶対パスを使用することをお勧めします。マシンが正常に構成されている場合は、で始まり$_SERVER["DOCUMENT_ROOT"]、アプリケーションパスとインクルードパスを追加します。一部の共有ホスティングサーバーでは、ルートをどこかにハードコーディングする(または.htaccessファイルに追加する)必要がある場合があります。

于 2010-10-20T07:06:34.633 に答える
-2

使用するrequire('..\a.php');

PHPのマニュアルにはinclude、Windowsではバックスラッシュを使用すると書かれています。

編集:

おっと。コードを読み間違えました。この答えは無視してください。

于 2010-10-20T06:30:12.020 に答える