Intereting Posts
PHP – функция раскрывающегося списка, которая удерживает текущую страницу в фокусе Расширение псевдонима пространства имен PHP до полной строки пространства имен HTTP-сообщение PHP4 без cURL Безопасные возможности загрузки изображений пользователей в PHP Насколько уникальным является uniqid? Использование ресурсов в качестве индексов массивов в PHP Как использовать функции MySQL в Propel Установите часовой пояс по умолчанию в symfony Видеочат WebRTC с Ajax вместо WebSocket: возможно? Как запустить Eloquent Manager в Slim 3.1 Инъекции зависимостей Laravel 5 – Удалить публикацию по URL-адресу Динамическое добавление строк в таблицу HTML Использование JavaScript и получение значения текстового поля для каждого текстового поля путем отправки кнопки Почему я получаю «POST http: //54.xx.xx.xx/wp-admin/admin-ajax.php 500 (Internal Server Error)» при использовании WordPress + Ajax? Как напечатать один комментарий в drupal? Вычтите одну секунду из заданного времени

В чем разница между ob_flush и ob_end_flush?

Я запутался в функциях PHP ob_flush() и ob_end_flush() . О функции ob_flush в руководстве сказано

 The buffer contents are discarded after ob_flush() is called.This function does not destroy the output buffer like ob_end_flush() does. 

я запутался в словах, discarded и destroyed здесь . Даже если содержимое буфера отбрасывается в случае ob_flush() ним нельзя получить доступ, и даже если они будут уничтожены, как в случае ob_end_flush() ним нельзя получить доступ. Тогда в чем разница между этими двумя функциями?

ОБНОВИТЬ:

В ответ на ответ JamWaffles я не понимаю значимости удаления всего в буфере, но сохраняя буфер и удаляя весь буфер (освобождая его), потому что PHP не имеет понятия указателей, и вы не можете получить адрес буферов, поэтому должно быть неважно, вы сохраняете пустой буфер с вами или освобождаете его

Solutions Collecting From Web of "В чем разница между ob_flush и ob_end_flush?"

Я думаю, что в этом случае они означают одно и то же. ob_flush() используется, когда вы хотите очистить части страницы от клиента, тогда как ob_end_flush() очищает весь буфер, а затем уничтожает буфер. То, что ob_flush() делает, удаляет все в буфере, но сохраняет буфер таким образом, что после ob_flush() может быть ob_flush() больше данных.


Я постараюсь объяснить лучше.

Выброшенные

Скажем, у меня красивое, ярко-оранжевое пластиковое ведро. Это мой буфер . Затем я получаю песок, представляющий содержимое буфера , и заполняю буфер (ведро) вверх. Затем я выбираю это ведро с песком в нем и выливаю его в песочницу, которая является моим клиентом . Вы заметите, что песок ушел, но ведро остается. Это означает, the buffer contents are discarded – сам буфер может быть повторно использован (снова заполнен песком). В памяти память освобождается, но не освобождается, поэтому ее можно снова заполнить.

разрушенный

Теперь, если мы снова возьмем наше ведро, залейте его песком еще раз, вылейте песок и затем поджечь ведро, потому что мы его больше не требуем, это называется уничтожением буфера ; данные в буфере исчезли, но так же и сам буфер . В памяти, память освобождается для другого использования.


Насколько это важно в PHP, без указателей, OP спрашивает? Ну, это зависит от того, что вы хотите сделать. Если вы обрабатываете длинную страницу и хотите (например) отправить заголовок и боковую панель клиенту, когда вы обрабатываете остальную часть страницы для отправки после ее завершения, используйте ob_flush() .

Если вы хотите сбросить что-то к клиенту без каких-либо дополнительных результатов после него, используйте ob_end_flush() .


Я имею в виду абсолютно неуважение в разговоре в довольно покровительственном тоне; Я хотел сделать аналогию, чтобы сделать определения максимально ясными.

ob_flush не отключает буферизацию вывода

ob_end_flush() отображает все из буфера, а затем уничтожает буфер. ob_flush делает то же самое, но не уничтожает буфер, просто очищает его.

ob_flush() =

 ob_end_flush(); ob_start();