2010-01-27 17 views

Respuesta

28

Usted querrá mirar las funciones de almacenamiento intermedio de salida.

//get anything that's in the output buffer, and empty the buffer 
$oldContent = ob_get_clean(); 

//start buffering again 
ob_start(); 

//include file, capturing output into the output buffer 
include "test.php"; 

//get current output buffer (output from test.php) 
$myContent = ob_get_clean(); 

//start output buffering again. 
ob_start(); 

//put the old contents of the output buffer back 
echo $oldContent; 

EDIT:

Como señala Jeremy, buffers de salida se acumulan. Entonces, en teoría, simplemente podría hacer algo como:

<?PHP 
function return_output($file){ 
    ob_start(); 
    include $file; 
    return ob_get_clean(); 
} 
$content = return_output('some/file.php'); 

Esto debería ser equivalente a mi solución original más prolija.

Pero no me he tomado la molestia de probar esta.

+2

¿Por qué es necesario detener los almacenamientos intermedios existentes? Buffers de salida en PHP stack: http://php.net/ob_start –

+2

No lo es - Simplemente no había notado la capacidad de apilamiento. Editando mi respuesta. – timdev

8

Probar file_get_contents().

Esta función es similar a file(), excepto que file_get_contents() devuelve el archivo en una cadena.

+0

Definitivamente la mejor respuesta aquí. Corto. Inteligente. –

9

intentar algo como:

ob_start(); 
include('test.php'); 
$content = ob_get_clean(); 
-1

Puede utilizar la función file_get_contents.

+1

Me pregunto por qué la gente sugiere el almacenamiento en búfer de salida cuando es mucho más simple. –

+17

Quizás porque file_get_contents no ejecuta el código PHP en el archivo? – fool4jesus

4

Solución # 1: Hacer uso de include (funciona como una función): [Mi mejor solución] index.php

del archivo: included.php

<?php 
$bar = 'BAR'; 
$php_file = include 'included.php'; 
print $php_file; 
?> 

del archivo:

<?php 
$foo = 'FOO'; 
return $foo.' '.$bar; 
?> 
<p>test HTML</p> 

Esto dará como resultado FOO BAR, pero Nota: Trabajo s como una función, por lo RETURN pases contenidos de vuelta a la variable (<p>test HTML</p> se perderán en el anterior)


Solución # 2: op_buffer():

index.php

del archivo:

<?php 
$bar = 'BAR'; 
ob_start(); 
include 'included.php'; 

$test_file = ob_get_clean(); //note on ob_get_contents below 
print $test_file; 
?> 

Archivo incluido.php:

<?php 
$foo = 'FOO'; 
print $foo.' '.$bar; 
?> 
<p>test HTML</p> 

Si utiliza ob_get_contents() va de salida FOO BAR<p>test HTML</p>dos veces, asegúrese de usar ob_get_clean()


Solución # 3: file_get_contents():

índice de archivo. php:

<?php 
$bar = 'BAR'; 
$test_file = eval(file_get_contents('included.php')); 

print $test_file; 
?> 
included.php

del archivo:

$foo = 'FOO'; 
print $foo.' '.$bar; 

Esta es la salida FOO BAR, pero Nota: include.php no debería tener <?php etiquetas de apertura y cierre como se está ejecutando a través de eval()

+0

La única razón por la que el búfer generaría dos veces es si el búfer no se mantuvo y luego se limpió antes del final del archivo, lo que significa que el búfer se repite automáticamente. Tal vez ese es el problema que has estado teniendo. – worldofjr

+1

Aah, gracias @worldofjr, no fuiste muy específico, pero me apuntaste en la dirección correcta en OB; 'ob_get_contents()' debe ser 'ob_get_clean()' de lo contrario, se genera dos veces. Respuesta que se edita en consecuencia. – Duncanmoo

0

El otras respuestas, por razones desconocidas para mí, no llegan a la solución correcta.

Sugiero usar el búfer, pero debe obtener el contenido y luego limpiar el búfer antes de que termine la página, de lo contrario se emite. Si desea utilizar la salida del archivo incluido, debe usar op_get_contents(), que devolverá una cadena de los contenidos del búfer.

Tampoco necesita hacer un bucle sobre los includes ya que cada uno solo agregará al búfer (a menos que lo limpie primero).

Por lo tanto, podría utilizar lo siguiente;

ob_start(); 
include_once('test.php'); 
include_once('test2.php'); 
$contents = ob_get_contents(); 
ob_end_clean(); 

Espero que esto ayude.

Cuestiones relacionadas