0

test.phpフォルダにファイルがありますmyfoldermyfolderと呼ばれる別のフォルダも含まれていますinner

と の両方myfolderに、innermsg.php というファイルが含まれています。全体のレイアウトは次のようになります。

  • マイフォルダ
    • test.php
    • インナー
      • msg.php
    • msg.php

ではtest.php、include_path を に設定し./inner、ファイルを含めましたmsg.php

<?php
error_reporting(E_ALL | E_STRICT);
ini_set("include_path", "./inner");
echo ini_get('include_path'); // shows ./inner
include("msg.php"); // outputs hello from myfolder/inner/msg.php
?>

ただし、作業ディレクトリを に変更すると./innermyfolder/msg.php代わりに が含まれますmyfolder/inner/msg.php

<?php
error_reporting(E_ALL | E_STRICT);
ini_set("include_path", "./inner");
echo ini_get('include_path'); // shows ./inner
chdir('./inner');
include("msg.php"); // outputs hello from myfolder/msg.php
?>

コードの 2 番目の部分には、myfolder/inner/msg.php代わりに? を含めるべきではありませんmyfolder/msg.phpか?

4

2 に答える 2

3

まず、ディレクトリ パスの構文を見てみましょう。

./inner

これは、現在のディレクトリ ( ./) で というディレクトリを探しますinner

include_pathただし、をに設定する前に./inner、現在の作業ディレクトリを に変更する./innerので、実質的に を探していることになります/myfolder/inner/inner/msg.php

コードをもう一度見てみましょう。

//Current working directory is /myfolder

//Here you change the current working directory to /myfolder/inner
chdir('./inner');

//Here you set the include_path to the directory inner in the current working directory, or /myfolder/inner/inner
ini_set("include_path", "./inner");

//You echo out the explicit value of include_path, which, of course, is ./inner
echo ini_get('include_path'); // shows ./inner

//include fails to find msg.php in /myfolder/inner/inner so it looks in the scripts directory, which is /myfolder/msg.php.
include("msg.php"); // outputs hello from myfolder/msg.php

指定されたパスで参照されているファイルが見つからない場合に何が起こるかについて、次のように記載されているドキュメントを確認してください。include()

include は、失敗する前に、呼び出し元のスクリプト自身のディレクトリと現在の作業ディレクトリを最終的にチェックインします。

include_path をに設定してみてください。実際にルートで/myfolder/innerある場合/myfolderは、に設定するだけです/inner.which の意味が省略​​されていることに注意してくださいcurrent working directory/ルートディレクトリを見てください。

于 2013-07-16T12:31:29.800 に答える