#php #function
Вопрос:
я пытаюсь создать статический генератор сайтов, который работает с отличным классом маршрутизации.
if (php_sapi_name() === "cli") {
foreach ($router->get() as $route) {
$out = ob_get_contents();
call_user_func_array($route['function'], array());
ob_end_clean();
file_put_contents("./temp/" . $route['expression'] . ".html", $out);
}
}
Поэтому я пытаюсь это сделать, я могу видеть скомпилированный html — код через терминал, но файл пуст.
Как я могу сохранить вывод функции call_user_func_array ()?
Комментарии:
1.Вам нужно позвонить
ob_get_contents()
после вызова функции, а не до нее.2. Вы также можете комбинировать
ob_get_contents()
иob_end_clean()
сob_get_clean()
3. Я попытаюсь сейчас. Спасибо за ваш комментарий
4. Я все еще вижу вывод с терминала, которого нет в файлах.
5. Все то же самое.
Ответ №1:
Смотрите этот пример:
if (php_sapi_name() === "cli") {
// Start output buffering here
ob_start();
foreach ($router->get() as $route) {
call_user_func_array($route['function'], array());
// get output of `$route['function']` to $out variable
$out = ob_get_contents();
// clean buffer
ob_clean();
file_put_contents("./temp/" . $route['expression'] . ".html", $out);
}
// stop output buffering
ob_end_clean();
}
Комментарии:
1. Разве вам не нужно очищать выходной буфер между итерациями? В противном случае каждый файл будет содержать содержимое предыдущих файлов.
2. @Barмар ты прав, исправлю через минуту.
3. Конечно. Я попробую.