Как сохранить вывод функции call_user_func_array()

#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. Конечно. Я попробую.