10/10/2018, 11:10
hàm ob_flush() thật khó hiểu?
mình đọc một đoạn code thấy có sử dụng hàm ob_flush():
</div>
<div id="Menu">
<a href="index.php">Trang chu</a><br />
<?php # Doan ma 12.2 - footer.html
if (isset($_SESSION['user_id']) AND (substr($_SERVER['PHP_SELF'], -10) != 'logout.php')) {
echo '<a href="logout.php">Thoat ra</a><br/>
<a href="change_password.php">Thay doi mat khau</a><br/>';
} else {
echo ' <a href="register.php">Dang ky</a><br/>
<a href="login.php">Dang nhap</a><br/>
<a href="forgot_password.php">Quen mat khau</a><br/>';
}
?>
</div>
</body>
</html>
<?php
ob_flush();
?>
Mình lên mạng search thì nó có tác dụng gửi nội dung của bộ đệm xuống trình duyệt?
nhưng một vấn đề là nội dung của bộ đệm đó là gi? và tại sao lại gửi xuống?
mình mất ăn mất ngủ vì điều này! mong mọi người giúp đỡ!
Thanks trước!
</div>
<div id="Menu">
<a href="index.php">Trang chu</a><br />
<?php # Doan ma 12.2 - footer.html
if (isset($_SESSION['user_id']) AND (substr($_SERVER['PHP_SELF'], -10) != 'logout.php')) {
echo '<a href="logout.php">Thoat ra</a><br/>
<a href="change_password.php">Thay doi mat khau</a><br/>';
} else {
echo ' <a href="register.php">Dang ky</a><br/>
<a href="login.php">Dang nhap</a><br/>
<a href="forgot_password.php">Quen mat khau</a><br/>';
}
?>
</div>
</body>
</html>
<?php
ob_flush();
?>
Mình lên mạng search thì nó có tác dụng gửi nội dung của bộ đệm xuống trình duyệt?
nhưng một vấn đề là nội dung của bộ đệm đó là gi? và tại sao lại gửi xuống?
mình mất ăn mất ngủ vì điều này! mong mọi người giúp đỡ!
Thanks trước!
Bài liên quan
Nói chung bạn sẽ thấy còn nhiều người code kiểu như vậy. Nhưng đừng bắt chước cách code ko hiệu quả đó. Cách này trên các ứng dụng console thì phù hợp hơn
Tại sao gửi xuống? => Không gửi thì trình duyệt hiển thị cái gì
Đơn giản vậy có gì mà mất ăn mất ngủ
Chỉ cần dùng print hoặc echo không cần dùng ob_flush vẫn hiển thị được đấy thôi!
Mình cũng bắt đầu mất ăn mất ngủ vì cái này rồi đấy.
Giá trị của ob_flush thường là khi ta muốn gửi ngay kết quả html đã được sinh ra cho người dùng (Apache có thể đợi đến khi sinh xong toàn bộ trang kết quả rồi mới gửi đi cả cục). ob_flush mình hay dùng trong trường hợp dự kiến ra được toàn bộ kết quả sẽ lâu (và do đó người dùng sốt ruột, hoặc bị timeout trình duyệt thì càng dở), nên flush dần ra chẳng hạn trong vòng lặp thì người dùng đỡ sốt ruột hơn và cũng tránh được timeout trình duyệt.
Do đó nếu chỉ có 1 ob_flush, và lại đặt ở cuối file thì đơn giản là vì không hiểu ob_flush, và do đấy viết nó ra 1 cách vô nghĩa.
Thân.
@tiendx2002: Dạo này bác còn cày freelance nữa ko? cho mình xin 1 chân nào.
Nhân nói về timeout, có người sẽ thắc mắc sao không dùng ini_set cho nó tăng lên, xin thưa là không phải host nào cũng tăng được.
Trong trường hợp tăng được như là chạy local thì có thể tăng timeout lên thật cao và sử dụng ob_flush cho crawler. Tuy vậy vẫn có vấn đề phát sinh nếu output của nó quá nhiều gây treo trình duyệt.
@vbox: Mình hiện tại vẫn lấy dự án nước ngoài nhưng không còn làm cá nhân nữa nên cũng không hẳn là freelance, hiện tại CodeAndMore đang đủ người rồi nên phải sau tháng 8 năm nay mình mới tiếp tục mở rộng thêm. Bạn có khả năng code và giao tiếp tốt thì chả cần phải ở CodeAndMore, cứ lên thẳng các marketplace mà bid thôi.
Thân.
Mạn phép ace về cái vụ crawler. Nếu đã chạy crawler thì chuyện timeout là chuyện tất yếu ko phải bàn rồi. Ý mình ở đây là dùng để xuất ra trạng thái hiện tại cho người dùng như bác nói ấy. Còn cao siêu hơn thì diễn tả như đại ca pcdinh