2011-12-14 8 views
5

Necesito un poco de ayuda de PHP aquí, el contenido incluido aparece como '1', lo que significa que es cierto pero necesita que aparezca su contenido y no estoy seguro de por qué no lo es. Aquí es una versión abreviada de una función:Usando include() dentro de ob_start()

public function content { 
    $website->content = 'Some content here. '; 
    ob_start(); 
    include('myfile.php'); 
    $file_content = ob_end_clean(); 
    $website->content .= $file_content; 
    $website->content .= ' Some more content here.'; 
    echo $website->content; 
} 

Este salidas:

 
Some content here 
1 
Some more content here 

Cuando lo necesito a salida:

 
Some content here 
'Included file content here' 
Some more content here 

Cualquier idea es como puedo solucionar este problema?

Respuesta

8

Intente utilizar ob_get_clean() en lugar de ob_end_clean().

Ambos borran el búfer en uso pero ob_end_clean() devuelve un valor booleano, mientras que ob_get_clean() devuelve el contenido del búfer en uso.

+0

Gracias, eso funciona. –

2

Debe usar ob_get_clean(), no ob_end_clean(). El primero devuelve una cadena del búfer de salida y lo vacía, mientras que el segundo solo hace el vaciado y devuelve un bool.

2

En lugar de utilizar ob_end_clean modificar el código existente en algo similar a la de abajo

ob_start(); 

include('myfile.php'); 

$file_content = ob_get_contents(); 

ob_end_clean(); 

La razón por la que no voy a votar a favor de ob_get_clean es porque he tenido momentos en los que otros desarrolladores se confunden con respecto a lo que es realmente pasando, el nombre de la función realmente no indica que el almacenamiento en búfer de salida terminará después de su llamada.

Creo que la función será propensa a otros errores, por lo tanto, usando ob_start/ob_end_clean es más fácil de comprender y mejor para el futuro mantenimiento del código.

La compensación entre una línea adicional de código pero más fácil de entender vale la pena.