ob_start PHP代码问题

时间:2011-07-05 09:12:25

标签: php ob-start

好的,我无法掌握这个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个内部服务器错误。为什么呢?

1 个答案:

答案 0 :(得分:0)

不应该为包含eval()的字符串调用PHP <?php ?>,因为假设字符串本身的内容是纯PHP代码。所以除了使用@Boldewyn的建议外,你应该能够删除你正在进行的两个trim()来电。