0

わかりました、このob_startとob_end_cleanのコードを理解することはできません...

基本的に、ページセクション内にPHPコードを出力しようとしています。

これが私のソースコードです:

$content = trim(html_entity_decode($context['page_data']['body'], ENT_QUOTES, $context['character_set']));
$content = trim($content, '<?php');
$content = trim($content, '?>');

function dream_error_handler($output)
{
    $error = error_get_last();
    $output = "";
    if (!empty($error))
        foreach ($error as $info => $string)
            if ($info == 'message')
                $output .= $string;

    return $output;
}

ob_start('dream_error_handler');
eval($content);
$code = ob_get_contents();
ob_end_clean();

$context['page_data']['body'] = $code;

今、テンプレート関数で、私はこれを使用しています:

global $context;

echo '
                <div class="cat_bar">
                    <h3 class="catbg">
                        ', $context['page_data']['title'], '
                    </h3>
                </div>
                <span class="upperframe"><span></span></span>
                    <div class="roundframe">
                        ', $context['page_data']['body'], '
                    </div>
                <span class="lowerframe"><span><!-- // --></span></span>
            ';

では、なぜこのエラーメッセージが表示されるのですか?

HTTPエラー500(内部サーバーエラー):サーバーが要求を実行しようとしたときに、予期しない状態が発生しました。

私はここで何が間違っているのですか?$ context ['page_data'] ['body']には有効なPHPコードがあり、単純ですecho 'Hello World';が、この500内部サーバーエラーが発生します。なんで?

4

1 に答える 1

0

文字列自体の内容は純粋なPHPコードであると想定されているため、 PHPeval()を含む文字列に対しては呼び出さないでください。したがって、@ Boldewynの提案を使用することに加えて、行って<?php ?>いる2つの呼び出しを削除できるはずです。trim()

于 2011-07-05T09:25:36.697 に答える