0

最初に私のファイル構造を示しましょう。

/www/
    myfile.php
    anotherC.php
     a/
       b.php
       c.php

内部のコードmyfile.phpは次のとおりです。

<?php
    include_once("a/b.php");
?>

内部のコードb.phpは次のとおりです。

<?php
    include_once("c.php");
?>

そして最後に内部c.php

<?php
   echo "hello i'm C.php";
?>

だから、私が呼び出すwww/myfile.phpと、出力が得られます:

こんにちは、C.php です。

これらは正常に動作します。しかし、私に変えさせてb.phpください

<?php
     include_once("../anotherC.php"); //or include_once("./c.php"); (it won't work too)
?>

今、私が呼び出すとwww/myfile.php、エラーが発生します:

警告: include_once(../anotherC.php): ストリームを開けませんでした: No such file or directory in /home/hasib/Desktop/www/a/b.php on line 2 Warning: include_once(): Failed opening '. 2 行目の /home/hasib/Desktop/www/a/b.php に含めるための ./anotherC.php' (include_path='.:/usr/share/php:/usr/share/pear')

今私の質問は、なぜinclude_once("c.php"); 完璧に機能したのですか??

4

3 に答える 3

1

ドキュメント: _

ファイルが include_path に見つからない場合、include は失敗する前に呼び出しスクリプト自身のディレクトリと現在の作業ディレクトリを最終的にチェックインします。

パスが定義されている場合 — 絶対パス (Windows ではドライブ文字または \、Unix/Linux システムでは / で始まる) または現在のディレクトリに対する相対パス (. または .. で始まる) — include_path は完全に無視されます。たとえば、ファイル名が ../ で始まる場合、パーサーは親ディレクトリを調べて、要求されたファイルを見つけます。

あなたの例の「呼び出しスクリプト」は b.php です。明らかに、ディレクトリは「/www/a/」です。

getcwd() を使用して、myfile.php または b.php の「現在のディレクトリ」を取得できます。「/www/」が返されます。

そのため、include_once("c.php"); 最初に呼び出しスクリプトのディレクトリ、つまり /www/a/ で c.php を検索し、c.php を正常に取得します。

when include_once("../anotherC.php"); 、現在のディレクトリへの相対パスで anotherC.php のみを検索します。現在のディレクトリは /www/ であるため、 / で anotherC.php を検索し、 /anotherC.php は存在せず、警告をスローします。

于 2014-01-23T15:40:09.353 に答える
0

相対パスを含むインクルードは、常に MAIN スクリプトに対して相対的に行われます。include()インクルードされたデータをメイン スクリプトに直接カット アンド ペーストした場合と基本的に同じように動作します。したがって、サブインクルードが実行されると、またはの作業ディレクトリではなく、myFile.phpスクリプトの作業ディレクトリが使用されます。b.phpc.php

あなたの添え字は、それらのicnlduesに絶対パスを持っている必要があります.include(__FILE__ . 'c.php')

于 2014-01-23T15:23:25.590 に答える
0

この作業について私が考えることができる唯一の理由は/www/ainclude_path. これは、include_once("c.php")最初に/www/c.php(それが現在の作業ディレクトリであるため) を探し、次に/www/a/c.phpどれが見つかって機能するかを探すことを意味します。

ただし、include_once("./c.php")現在の作業ディレクトリのみを調べるように明示的に述べており、もちろんファイルがそこにないため、機能しません。

于 2014-01-23T15:23:32.993 に答える