1

ob_get_contents()をコアメソッドとして使用して、独自のテンプレートスクリプトを作成しています。これを使用することで、1つのファイルから呼び出して他のファイルをレンダリングできます。

同様に、4つのファイルがあると仮定します。

  • index.php
  • header.html
  • footer.html
  • 関数.php

index.php他のファイル(ここでは2つのhtmlファイル)の内容を呼び出してレンダリングします。次のコードを使用する。

//index.php
function render($file) {
    if (file_exists($file)) {
    ob_start();
    include($file);
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
    }
}
echo render('header.html');
echo render('footer.html');

ただし、(たとえば)にheader.html呼び出しが含まれている場合include('functions.php')、含まれているファイル(functions.php)をで再度使用することはできませんfooter.html。つまり、にもう一度インクルードする必要がありますfooter.html。したがって、ここでは、行include('functions.php')が両方のファイルに含まれている必要があります。

include()子ファイルから再度呼び出さずにファイルを作成するにはどうすればよいですか?

4

2 に答える 2

1

(出力バッファリング)を使用するob_start()と、ファイルの出力のみになります。つまり、ファイルを実行すると、出力が返されob_get_content()ます。出力のみが返されるため、他のファイルはインクルードを認識していません。

答えは、出力バッファリングではできないということです。またはincludeob_start の前のファイルinclude_once

于 2012-03-21T23:13:55.710 に答える
1

それは次のように機能します。

//index.php
function render($file) {
    if(!isset($GLOBALS['included'])) {
        $GLOBALS['included'] = array();
    } 

    if (!in_array($file, $GLOBALS['included']) && file_exists($file)) {
        ob_start();
        include($file);
        $content = ob_get_contents();
        ob_end_clean();

        $GLOBALS['included'][] = $file;
        return $content;
    }
}

echo render('header.html');
echo render('footer.html');

あるいは、 include_once ( ) を使用することもできinclude_once $file;、PHP がそれを行います。

ただし、ファイルの読み込み構造が、これらのイベントが発生しないような形になっていることを確認することをお勧めします。

于 2012-03-21T23:16:05.333 に答える