Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/03/2015, 13:33
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Evitar que PHP envie el HTML antes de tiempo

Trabajando con tu sugerencia pateketrueke he hecho lo siguiente

Código HTML:
Ver original
  1. <?php
  2. //devuelve todo el html
  3. function controller(){
  4.    return html(content());
  5. }
  6.  
  7. //construye la estructura principal y el contenido
  8. function html($content){
  9.    \ob_start();
  10.    ?>
  11.     <html>
  12.         <head>
  13.  
  14.         </head>
  15.         <body>
  16.             <p><?php echo $content ; ?></p>
  17.         </body>
  18.     </html>
  19.     <?php
  20.    return \ob_get_contents();
  21. }
  22.  
  23. //construye el contenido
  24. function content(){
  25.    \ob_start();
  26.    ?>
  27.     Esto es una prueba del control de salida con búfer.
  28.     <?php
  29.    return \ob_get_contents();
  30. }
  31.  
  32. //llama al html
  33. echo controller();
  34. ?>

Pero me he encontrado con esta salida

Código HTML:
Ver original
  1. Esto es una prueba del control de salida con búfer.
  2.         <html>
  3.         <head>
  4.  
  5.         </head>
  6.         <body>
  7.             <p>    Esto es una prueba del control de salida con búfer.
  8.     </p>
  9.         </body>
  10.     </html>
  11.         <html>
  12.         <head>
  13.  
  14.         </head>
  15.         <body>
  16.             <p>    Esto es una prueba del control de salida con búfer.
  17.     </p>
  18.         </body>
  19.     </html>

Si hago esto otro

Código PHP:
Ver original
  1. <?php
  2. //reemplaza
  3. function replace($búfer){
  4.     return (str_replace('{content}', content(), $búfer));
  5. }
  6. //devuelve todo el html
  7. function controller(){
  8.     return html();
  9. }
  10.  
  11. //construye la estructura principal y el contenido
  12. function html(){
  13.     \ob_start('replace');
  14.     ?>
  15.     <html>
  16.         <head>
  17.  
  18.         </head>
  19.         <body>
  20.             <p>{content}</p>
  21.         </body>
  22.     </html>
  23.     <?php
  24.     \ob_end_flush();
  25. }
  26.  
  27. //construye el contenido
  28. function content(){
  29.     \ob_start();
  30.     ?>
  31.     Esto es una prueba del control de salida con búfer.
  32.     <?php
  33.     return \ob_get_contents();
  34. }
  35.  
  36. //llama al html
  37. echo controller();
  38. ?>

No obtengo salida de ningún tipo, ni tan siquiera con var_dump(controller()); al final del documento.

¿Qué está fallando en la primera forma?

Sobre la segunda no me preocupa porque no quiero terminar construyendo un sistema de templates xD
__________________
Ayúdame a hacerlo por mi mismo.