Sự khác biệt giữa ob_flush()
và flush()
là gì và tại sao tôi phải gọi cả hai?PHP buffer ob_flush() so với flush()
Các ob_flush()
reference nói:
Chức năng này sẽ gửi các nội dung của bộ đệm đầu ra (nếu có).
Các flush()
reference nói:
sẽ xóa bộ đệm ghi của PHP và bất cứ điều gì phụ trợ PHP đang sử dụng (CGI, một máy chủ web, vv).
Tuy nhiên, nó vẫn tiếp tục nói:
[nó] có thể không có thể ghi đè chương trình đệm của máy chủ web của bạn ...
Vì vậy, dường như với tôi rằng tôi có thể chỉ cần sử dụng ob_flush()
mọi lúc. Tuy nhiên, tôi nhận được kết quả lạ khi tôi làm điều đó. Ai đó có thể giải thích một cách đơn giản những gì đang xảy ra ở đây?
Sử dụng ob_flush và tuôn ra và sử dụng chúng theo thứ tự đó. – Robino
Các chi tiết quan trọng còn thiếu trong câu trả lời này là tùy chọn cấu hình ['output_buffering'] (http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering), có giá trị mặc định trong sản xuất Các phiên bản của php.ini là 4096. Điều đó có nghĩa là khi bất kỳ tập lệnh PHP nào bắt đầu, 4096 byte đầu ra đầu tiên sẽ được đệm (trong bộ đệm có thể xóa được bằng 'ob_flush()'). Đây là lý do tại sao nó là cần thiết để sử dụng 'ob_flush()' cũng như 'flush()'. Vô hiệu hóa 'output_buffering' thông qua php.ini hoặc gọi' ob_end_clean() 'hoặc' ob_end_flush() 'ở đầu tập lệnh sẽ loại bỏ sự cần thiết này. –