¿Cuál es la diferencia entre ob_flush y ob_end_flush?

Estoy confundido acerca de las funciones de PHP ob_flush() y ob_end_flush() . Sobre la función ob_flush el manual dice

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

Estoy confundido acerca de las palabras discarded y destroyed aquí . Incluso si los contenidos del búfer se descartan en caso de ob_flush() , no se puede acceder a ellos e incluso si se destruyen como en el caso de ob_end_flush() no se puede acceder. Entonces, ¿cuál es la diferencia entre estas dos funciones?

ACTUALIZAR:

En respuesta a la respuesta de JamWaffles , no comprendo la importancia de eliminar todo en el búfer, pero mantener el búfer frente a la eliminación del búfer completo (liberarlo) porque PHP no tiene ningún concepto de punteros y no puede obtener la dirección de los búferes, por lo que no debería ser relevante Guardas el búfer vacío contigo o lo liberas.

Creo que en este caso significan lo mismo. ob_flush() se usa cuando desea vaciar partes de la página al cliente, mientras que ob_end_flush() vacía todo el búfer, luego destruye el búfer. Lo que ob_flush() hace es eliminar todo lo que hay en el búfer, pero mantiene el búfer en sí mismo para que se puedan ingresar más datos después de la llamada ob_flush() .


Voy a tratar de explicar mejor.

Descartado

Digamos que tengo un bonito cubo de plástico naranja shiny. Este es mi búfer . Luego obtengo algo de arena, que representa el contenido del búfer , y relleno el búfer (cazo). Luego, recojo este cubo con arena y lo vierto en un arenero, que es mi cliente . Notarás que la arena se ha ido, pero el balde permanece. Esto es lo que significa que the buffer contents are discarded : el búfer mismo se puede reutilizar (rellenar con arena nuevamente). En términos de memoria, la memoria se vacía pero no se libera, por lo que puede llenarse nuevamente.

Destruido

Ahora, si tomamos nuestro cubo de nuevo, lo llenamos con arena una vez más, vaciamos la arena y luego le prendemos fuego al cubo porque ya no lo necesitamos, eso se llama destruir el búfer ; Los datos en el búfer se han ido, pero también lo está el búfer . En términos de memoria, la memoria se libera para otro uso.


¿Es esto significativo en PHP, sin punteros, pregunta el OP? Bueno, depende de lo que quieras hacer. Si está procesando una página larga y desea (por ejemplo) enviar el encabezado y la barra lateral al cliente mientras procesa el rest de la página para enviarla una vez que haya terminado, use ob_flush() .

Si desea vaciar algo al cliente sin más resultados después de él, use ob_end_flush() .


Quiero decir absolutamente ninguna falta de respeto al hablar en un tono más condescendiente; Quería hacer una analogía para hacer las definiciones lo más claras posible.

ob_flush no desactiva el búfer de salida

ob_end_flush() muestra todo desde el búfer, luego destruye el búfer. ob_flush hace lo mismo, pero no destruye el búfer, simplemente lo borra.

ob_flush() =

 ob_end_flush(); ob_start();