PHP での require() ファイルインクルードの使用法の詳細な説明

黄舟
リリース: 2023-03-11 11:44:02
オリジナル
2362 人が閲覧しました

以前、いくつかの PHP フレームワーク のソース コードを見たとき、ファイルがインクルードされるときに、ファイル パスを結合するために dirname(FILE) が使用されていることが奇妙でした。そうすることでメリットはあったのですが、その理由がついに分かりました。

簡単な例を見てみましょう:

3 つの php ファイル a、b、c があります。 a.php は Web サイトのルート ディレクトリにあり、b.php は b フォルダー (b/b.php) にあり、c.php は c フォルダー (c/c.php) にあります。何かの混乱?画像から明らかです:

PHP での require() ファイルインクルードの使用法の詳細な説明

a.php と b.php の両方に c.php が含まれており、最後に c.php には d フォルダー - d/d.php に php ファイルが含まれています。

まず a.php を見てみましょう:

<?php 
    
    $file_name = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    require(&#39;c/c.php&#39;);
    
 ?>
ログイン後にコピー

これは非常に単純なコードです。印刷した後、c/c.php を確認する必要があります:

<?php 
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;../d/d.php&#39;);
 ?>
ログイン後にコピー

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 = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    // require(&#39;c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;../d/d.php&#39;);
 ?>
ログイン後にコピー

この時点で、d/d.php ファイルをインクルードしたいときに、パスが間違っていることがわかりますか?ここでは a.php コード内にいるため、a.php ファイルに対する相対パスになります。もちろん、パスは require('d/d.php'); である必要があります。 コードを次のように変更します。

<?php 
    $file_name = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    // require(&#39;c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;d/d.php&#39;);
 ?>
ログイン後にコピー

この時点では、まだ意味を理解していません。 b/b.php を見てみましょう:

<?php 
    $file_name = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    require(&#39;../c/c.php&#39;);
 ?>
ログイン後にコピー

説明する必要はありません。 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 = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    // require(&#39;../c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;d/d.php&#39;);
 ?>
ログイン後にコピー

ここでは、c/c.php を参照として使用するだけで済みます。それに比べて、d/d.php は にあります。 1 つ上のレベルに進みます。このように、基準は 1 つだけです。つまり、あなたが私を含めるか、彼が私を含めるかに関係なく、私は自分自身を基準としてのみ使用し、含めたいファイルは自分自身に対して相対的なものにすぎません。

dirname(FILE) が理解できない実践者の方は、Google で検索してください。非常に簡単です。

以上がPHP での require() ファイルインクルードの使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!