0

私が自分のサイトを運営しているとき、それは私に言い続けます

Warning: require_once(../../functions.inc.php): failed to open stream: No such file or directory in F:\xampp\htdocs\FinalYear\inc\functions\LoginOrRegister.inc.php on line 5

しかし、ファイルは、私が必要としているファイルのちょうど 2 フォルダー上にあります。私が次のことをしているとき:

set_include_path(dirname(__FILE__)."/../../");
require_once('functions.inc.php');

それは機能します(存在しないファイルのエラーメッセージは表示されませんが、 functions.inc.phpには、database.php から作成された新しいオブジェクトがあります。

$db = new database();

LoginOrRegister.php だけでなく、他のすべてのサイトでこれを呼び出すことができます。ファイルで自分で作成した場合でも、このオブジェクトは存在しないことが常にわかります。何か助けはありますか?

4

3 に答える 3

4

インクルードされたファイルからファイルをインクルードしているように見えます。その場合、相対パスは、最初のスクリプト内に含まれているスクリプトではなく、実行中のスクリプトに対して相対的である必要があります。

絶対パスを使用する方がはるかに簡単です (dirname(__FILE__)相対パスの前に使用します)。

require_once(dirname(__FILE__)."/../../functions.inc.php");
于 2013-03-19T11:20:01.343 に答える
1

おそらく、それ自体が別のファイルに含まれているファイルからファイルを含めています。PHP は、最初に呼び出されたファイルに関連してインクルードします。

したがって、この構造を検討してください。

|- htdocs
    |- index.php
    |- inc
        |- test.php (A)
        |- inc
            |- test.php (B)

ここで /index.php を呼び出し、index.php ファイルに inc/test.php が含まれている場合、これにはファイル A が含まれます。

test.php (A) 内で include inc/test.php も呼び出すと、パスが index.php からの相対パスであるため、test.php (A) が再度インクルードされます。代わりに、inc/test.php にインクルードがあるときに Web ブラウザから /inc/test.php を呼び出すと、呼び出された test.php (A) に test.php (B) が含まれます。

これは、PHP がインクルード ファイルのソースコードがインクルード行を置き換えるようにインクルードを処理するためです。そのため、基本的にソースコードを別の場所に移動します。

于 2013-03-19T11:22:08.967 に答える
0

そのような問題を回避するために、私は常にこれを行います。

$root = $_SERVER['DOCUMENT_ROOT']; //your website's root folder, where the index.php is
include("$root/path");
于 2013-03-19T11:36:04.167 に答える