Как сохранить PHP include() при создании нового файла с помощью ob_get_contents() и file_put_contents()

Я хочу создать новый файл с динамическим содержимым, используя ob_start () и ob_get_contents (), чтобы захватить всю созданную страницу. Затем я использую file_put_contents () для создания страницы с этим сгенерированным контентом. Однако проблема в том, что он анализирует PHP include() и сохраняет только содержимое HTML. Есть ли способ сохранить PHP include(), чтобы мне не приходилось менять код каждого файла, если мы хотим незначительные обновления?

1 ответ

У вас есть какой-то контроллер страницы? Если да, поместите все общие элементы в этом контроллере страниц (или в другое представление, включенное в контроллер) за пределы буфера вывода. Если нет, напишите один (или найдите открытый код, например).

Например;

// Page controller
include 'path/to/Page.class.php';
$page->contentfile = getpage(); // get the filename of the page using the url string
$page->header = "..."; // header string
$page->footer = "..."; // footer string
ob_start();
include_once($page->contentfile);
$content = ob_get_contents();
ob_end_clean();

echo $pageobj->display($content);

В page.php вы можете установить заголовок и т. Д., Используя что-то вроде $page->title = '';и эти настройки будут запомнены в контроллере страницы.

Помните, что вам нужно очистить выходной буфер (ob_end_clean();) до конца файла, или содержимое страницы может быть выведено дважды.

Приведенный выше код является лишь примером, но он должен указать вам правильное направление.

Другие вопросы по тегам