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!
pcdinh viết 13:17 ngày 10/10/2018
Người ta chỉ muốn đẩy phần nội dung trong buffer ra STDOUT và làm rỗng vùng buffer thôi. Nội dung đó có thể là phần HTML mà bạn thấy ở trên hoặc lên cao nữa bắt đầu từ khi người code bắt đầu đánh dấu vùng đệm

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
thuyduongcd viết 13:14 ngày 10/10/2018
Nội dung bộ đệm => là những gì bạn echo ra
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ủ
vodanh016 viết 13:10 ngày 10/10/2018
Thế thì nó khác gì print hay echo nhỉ?
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.
tiendx2002 viết 13:25 ngày 10/10/2018
Được gửi bởi linhtinh0901
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!
Trong đoạn code như trên thì việc ob_flush chẳng có giá trị gì.
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.
vbox viết 13:20 ngày 10/10/2018
ob_flush() thường được dùng trong các script như crawler.
@tiendx2002: Dạo này bác còn cày freelance nữa ko? cho mình xin 1 chân nào.
zmt264 viết 13:18 ngày 10/10/2018
Được gửi bởi vbox
ob_flush() thường được dùng trong các script như crawler.
@tiendx2002: Dạo này bác còn cày freelance nữa ko? cho mình xin 1 chân nào.
mạn phép thay mặt anh Tiến trả lời bạn là anh ấy dạo này vẫn đang cày ác chiến đấy, cứ contact trực tiếp anh ấy nhé
tiendx2002 viết 13:25 ngày 10/10/2018
Được gửi bởi vbox
ob_flush() thường được dùng trong các script như crawler.
@tiendx2002: Dạo này bác còn cày freelance nữa ko? cho mình xin 1 chân nào.
Crawler thì còn phải nghĩ tới việc tránh timeout của bản thân php, cần tách ra chạy làm nhiều lần, chứ không chỉ riêng trình duyệt. ob_flush có giá trị với trình duyệt và người dùng nhiều hơn.
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.
Được gửi bởi zmt264
mạn phép thay mặt anh Tiến trả lời bạn là anh ấy dạo này vẫn đang cày ác chiến đấy, cứ contact trực tiếp anh ấy nhé
Thanks em đã trả lời hộ
Thân.
vbox viết 13:11 ngày 10/10/2018
Được gửi bởi tiendx2002
Crawler thì còn phải nghĩ tới việc tránh timeout của bản thân php, cần tách ra chạy làm nhiều lần, chứ không chỉ riêng trình duyệt. ob_flush có giá trị với trình duyệt và người dùng nhiều hơn.
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.

Thanks em đã trả lời hộ
Thân.
tháng 8 àh bác. Khi đó cho mình xin 1 chân nhé.
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
Bài liên quan
0