Я запутался в функциях 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 не имеет понятия указателей, и вы не можете получить адрес буферов, поэтому должно быть неважно, вы сохраняете пустой буфер с вами или освобождаете его
Я думаю, что в этом случае они означают одно и то же. 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();