проблема ob_start с кодом PHP - PullRequest
0 голосов
/ 05 июля 2011

Хорошо, я не могу разобраться с этим кодом 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 Internal Server Error.Почему?

1 Ответ

0 голосов
/ 05 июля 2011

PHP eval() не следует вызывать для строки, содержащей <?php ?>, поскольку предполагается, что содержимое самой строки является чистым кодом PHP.Таким образом, вы сможете удалить два звонка trim(), которые вы делаете, в дополнение к предложению @ Boldewyn.

...