Ver Mensaje Individual
  #9 (permalink)  
Antiguo 23/03/2015, 15:53
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Evitar que PHP envie el HTML antes de tiempo

Cita:
Iniciado por guardarmicorreo Ver Mensaje

He leído sobre las funciones ob y no encuentro nada que esté haciendo mal.

Teniendo en cuenta el primer caso:

ob_start() abre el almacenamiento en búfer y almacena lo que hay después.

ob_get_contents() obtiene el almacenamiento en búfer en el momento que es llamado y lo devuelve.

En cada función tengo ob_start, que lo podría reemplazar por un único ob_start en la función controller y haría el mismo efecto, porque son apilables.

Y en cada función retorno el ob_get_contents para devolver el búfer correspondiente a esa función.

Finalmente introduce el content en el html y retorna el html completo.

No veo que tenga nada erróneo :S
Un problema que tienes es que supones cosas antes de comprobarlas y por otro lado no lees bien lo que te instruye tu tutor pateketrueke.
.
Cita:
Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.
Tienes que cerrar o vaciar el buffer tantas veces como ob_start emplees en el código. Ahora tomando tu ejemplo debiste tener algo asi:
Código PHP:
Ver original
  1. //devuelve todo el html
  2. function controller(){
  3.     html(content());
  4. }
  5.  
  6. //construye la estructura principal y el contenido
  7. function html($content){
  8.     \ob_start();
  9.     ?>
  10.     <html>
  11.     <head>
  12.  
  13.     </head>
  14.     <body>
  15.     <p><?php echo $content ;?></p>
  16.     </body>
  17.     </html>
  18.     <?php
  19.     \ob_end_flush();
  20. }
  21.  
  22. //construye el contenido
  23. function content(){
  24.     \ob_start();
  25.     ?>
  26.     Esto es una prueba del control de salida con buffer.
  27.     <?php
  28.     return \ob_get_clean();
  29. }
  30.  
  31. //llama al html
  32. controller();
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.