3

ディレクトリルートがあります:

index.php
includes/
    template.php
    testfile.php
    phpFiles/
        processInput.php
        testfile.php

index.php:

require_once("includes/template.php");

テンプレート.php:

require_once("includes/phpFiles/processInput.php")

プロセス入力.php:

require_once("testfile.php")
require_once("../testfile.php")

このコードは、index.php を実行すると機能しますが、もちろん、template.php を実行すると機能しません。

ご覧のとおり、index.php には通常どおり template.php が含まれています。しかし、template.php では、index.php があるディレクトリにいるかのようにインクルードする必要があります。しかし、processInput.php では、processInput.php があるディレクトリにいるかのようにインクルードします。

インクルード パスが常に必要なファイルのディレクトリになるように修正するにはどうすればよいですか? 2 番目のインクルード ファイルには、要求されたファイルと同じインクルード パスがありますが、次のファイルにはありません。

ご協力いただきありがとうございます!

編集: 奇妙なことは、クラス フォルダーにクラスを含めたことです。また、パスが相対パスであっても、想定どおりに他のファイルが含まれていました。なぜこれが起こるのですか?どうすれば修正できますか?

非常に重要な編集:これはすべて、私の例では、includes/phpFiles/processInput.php に含めると同じディレクトリにファイルが含まれているためであることに気付きました。これがまさにその理由だ。ファイル名以外を指定せずにファイルを含める場合、 include_path は実際には、必要なファイルが書き込まれているディレクトリです。誰でもこれを確認できますか?

4

4 に答える 4

7

絶対パスを使用してください。

require_once($_SERVER['DOCUMENT_ROOT']."/includes/phpFiles/processInput.php");

すべての d ファイルに同様の形式を使用すると、requireどこにいても機能します。

于 2012-06-03T13:52:18.390 に答える
3

これはいくつかの方法で行うことができます。

  1. 呼び出しset_include_pathを実行するディレクトリを制御するために使用します。require()

  2. で定義する定数に共通の絶対ベース パスを定義しindex.php、それをすべてのrequire()ステートメントで使用します (例: require(BASEPATH . '/includes/template.php'))。

  3. どこでも相対パスを使用し、活用するdirname(__FILE__)__DIR__、それらを絶対パスに変換します。例えば:require(__DIR__ . '/phpFiles/processInput.php');

デフォルトでは、現在の作業ディレクトリがインクルード パスで使用されます。の出力を調べることで、これを確認できますget_include_path()。ただし、これは がどこから作られているかによるものではありません。include()これは、メインの実行スクリプトに関連しています。

于 2012-06-03T13:57:32.113 に答える
1

相対パスを使用しています。絶対パスを使用する必要があります: $_SERVER['DOCUMENT_ROOT'].

include/require を行うと、基本的にすべてのコードをあるファイルから別のファイルに一時的に移動することになります。

したがって、file1.php ( にありますroot) に以下が含まれているとします。

require("folder/file.php");

そして、file1.phpfile2.phpに含めます(これは別の場所にあります (たとえば、folderディレクトリなど):

file2.php:

require("../file1.php");

これでfile1.phpのコードはすべてfile2.phpにあります。したがって、file2.phpは次のようになります。

require("../file1.php");
require("folder/file.php");//but because file2.php is already in the `folder` directory, this path does not exist...
于 2012-06-03T13:53:15.363 に答える
0

index.php:

require_once("includes/template.php");

テンプレート.php:

require_once("includes/phpFiles/processInput.php")

ディレクトリ構造がオフになっています。ファイルのインクルードは、使用しているファイルから見られます。したがって、「template.php」は、現在のフォルダー (/includes/)で「includes/」フォルダーを探しています。

他の人が言っているように、絶対パスを使用すると、ファイルシステムのルートから常にアクセスできるようになります。または、次を使用します。

require_once("phpFiles/processInput.php")

template.php ファイル内 (これは、何かを移動すると破損する可能性がはるかに高いため、ファイル システムのルートからの絶対パスを使用することを他の人が推奨する理由です)。

ところで、「index.php」をある種のフレームワーク システムとして使用している場合は、次のような共通ファイルのアドレスを格納する変数を定義することを検討できます。

define('APPLICATION_PATH', realpath(dirname(__FILE__));
define('PHPFILES_PATH', APPLICAITON_PATH . '/includes/phpFiles/');
于 2012-06-03T13:59:42.460 に答える