Cách tốt hơn để thực hiện việc này là sử dụng hai tham số đầu tiên được chấp nhận bởi ob_start
: output_callback
và chunk_size
. Trước đây xác định một cuộc gọi lại để xử lý đầu ra khi nó được đệm, và sau đó xác định kích thước của các khối đầu ra để xử lý.
Dưới đây là một ví dụ:
$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);
Trong ví dụ này, các bộ đệm đầu ra sẽ được rửa (gửi) cho mỗi 4096 byte đầu ra (và một lần nữa vào cuối bởi ob_end_flush
cuộc gọi). Mỗi khi bộ đệm bị xóa, cuộc gọi lại $write_ob_to_file
sẽ được gọi và chuyển đoạn mới nhất. Điều này được ghi vào test.html. Gọi lại sau đó trả về false
, có nghĩa là "đầu ra đoạn này như là". Nếu bạn muốn chỉ ghi đầu ra vào tệp chứ không phải luồng đầu ra của PHP, bạn có thể trả về một chuỗi rỗng để thay thế.
Nguồn
2016-05-07 15:41:27
ý bạn là test.php (hoặc kết quả đánh giá) có thể rất lớn? –
Kết quả đánh giá nó có thể rất lớn. –