Лучший способ сделать это - использовать первые два параметра, принятые ob_start
: output_callback
и chunk_size
. Первая специфицирует обратный вызов для обработки вывода, поскольку он буферизуется, а последний определяет размер кусков вывода для обработки.
Вот пример:
$output_file = fopen('test.html', 'w');
if ($output_file === false) {
// Handle error
}
$write_ob_to_file = function($buffer) use ($output_file) {
fwrite($output_file, $buffer);
// Output string as-is
return false;
};
ob_start($write_ob_to_file, 4096);
include 'test.php';
ob_end_flush();
fclose($output_file);
В этом примере выходной буфер будут сброшены (пересылаются) на каждые 4096 байт вывода (и еще раз в конце со стороны ob_end_flush
вызова). Каждый раз, когда буфер сбрасывается, обратный вызов $write_ob_to_file
будет вызываться и передаваться последним фрагментом. Это записывается в test.html. Затем обратный вызов возвращает false
, что означает «вывести этот кусок как есть». Если вы хотите только записать вывод в файл, а не в выходной поток PHP, вместо этого вы можете вернуть пустую строку.
Вы имеете в виду test.php (или результат его оценки) может быть огромным? –
Результат оценки может быть огромным. –