以前、いくつかの PHP フレームワーク のソース コードを見たとき、ファイルがインクルードされるときに、ファイル パスを結合するために dirname(FILE) が使用されていることが奇妙でした。そうすることでメリットはあったのですが、その理由がついに分かりました。
簡単な例を見てみましょう:
3 つの php ファイル a、b、c があります。 a.php は Web サイトのルート ディレクトリにあり、b.php は b フォルダー (b/b.php) にあり、c.php は c フォルダー (c/c.php) にあります。何かの混乱?画像から明らかです:
a.php と b.php の両方に c.php が含まれており、最後に c.php には d フォルダー - d/d.php に php ファイルが含まれています。
まず a.php を見てみましょう:
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; require('c/c.php'); ?>
これは非常に単純なコードです。印刷した後、c/c.php を確認する必要があります:
<?php $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('../d/d.php'); ?>
Print " c .php、a.php に必要です」、$file_name は a.php で定義された変数です。最後にd.phpがインクルードされます。 d フォルダは現在の c.php ファイルの 1 階層上にあるため、常識的にはパスは「../d/d.php」と書くのが自然です。ただし、残念ながらエラーが報告されます。その理由は、c.php などのインクルード ファイルに他のファイルをインクルードする場合、そのパスは最も外側の親ファイル、つまり a.php を基準とした相対パスになり、あなたが私にインクルードされていると理解できるからです。 , だから、あなたは私を頼らなければなりません。非常に謎に思えますが、原理は実際には非常に単純です。require ('c/c.php'); を c/c.php ファイル内のコードとして考えることができ、a.php は次のようになります。 :
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; // require('c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('../d/d.php'); ?>
この時点で、d/d.php ファイルをインクルードしたいときに、パスが間違っていることがわかりますか?ここでは a.php コード内にいるため、a.php ファイルに対する相対パスになります。もちろん、パスは require('d/d.php'); である必要があります。 コードを次のように変更します。
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; // require('c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('d/d.php'); ?>
この時点では、まだ意味を理解していません。 b/b.php を見てみましょう:
<?php $file_name = 'b.php'; echo "this is b.php"; echo "<hr>"; require('../c/c.php'); ?>
説明する必要はありません。 require ('../c/c.php'); これを c/c.php のコードに置き換えると、c/c のコードを変更したばかりであることに注意してください。 php を変更し、require('../d/d.php'); を require('d/d.php') に変更しました。以下のコードを見てください。 , require('d/d.php'); のパスが間違っています。require('../d/d.php'); にする必要があります。戻って c/c.php の require パスを変更すると、b/b.php は正常に実行できるが、a/a.php は c を共有できないというのは本当ですか。 /c? .php、全身に影響します、どうすればいいですか?
この時点で、記事の冒頭で説明したディレクトリ名(FILE)に戻ります。これは良いことであり、上記の問題を完全に解決できます。これを使用すると、ファイルがどのファイルに含まれているか、またそのファイルがどのパスにあるかを心配する必要がなくなります。 dirname (FILE) で相対パスを指定できるため、親ファイルのレベルを気にする必要がなくなります。現行ファイル。つまり、c/c.php の require パスを次のように変更する必要があります。
<?php $file_name = 'b.php'; echo "this is b.php"; echo "<hr>"; // require('../c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('d/d.php'); ?>
ここでは、c/c.php を参照として使用するだけで済みます。それに比べて、d/d.php は にあります。 1 つ上のレベルに進みます。このように、基準は 1 つだけです。つまり、あなたが私を含めるか、彼が私を含めるかに関係なく、私は自分自身を基準としてのみ使用し、含めたいファイルは自分自身に対して相対的なものにすぎません。
dirname(FILE) が理解できない実践者の方は、Google で検索してください。非常に簡単です。
以上がPHP での require() ファイルインクルードの使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。