| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Проблема с ob_start() |
| Автор: Shark 4.6.2011, 11:58 | ||||||||||
файл config.php
файл index.php
файл menu.tpl.php (находится в папке tamplate)
почему выводится пустая страница? если в файле index.php заменить это
на это
все работает нормально |
| Автор: InfMag 5.6.2011, 16:09 | ||||
Shark, если я не ошибаюсь кратко оглянув код, то проблема в
|
| Автор: Shark 6.6.2011, 00:27 |
| InfMag, помогло... а можешь пояснить подробнее.. из-за чего это так? вроде же и без этого должно отображаться!? |
| Автор: InfMag 6.6.2011, 01:19 |
| Shark, нет, не должно. Ну на низком уровне мне сложно объяснить, я как на самом деле внутри реализовано не знаю, расскажу только как я себе представляю. Я себе представляю происходящее так: при ob_start() дальнейший код как бы не в документе уже происходит, а в отдельном контейнере выполнения с контекстом, который был описан выше. Или вроде как компилируется, а потом исполняется позже при вызове компилированный код. Все echo и прочие выводы попадают в этот самый буфер, а не в документ. ob_get_contents() отдаёт контент, что произошёл в буфере, но его нужно получать до закрытия буфера. ob_end_clean() просто закрывает буфер, очищая его, и контент если осталься, то только там, куда ты передавал результат ob_get_contents(), если передавал конечно. ob_end_flush() закрывает буфер и сразу выводит его результат выполнения, после очищает. В общем я бы сравнил с eval-ом) Как-то так по колхозному. Добавлено @ 01:24 Ну ты можешь выполнить свободно любой код где понравится, а его вывод потом где угодно выставить. |