me trataron:¿Cómo se define un PHP incluir como una cadena?
$test = include 'test.php';
Pero eso incluía el archivo normalmente
me trataron:¿Cómo se define un PHP incluir como una cadena?
$test = include 'test.php';
Pero eso incluía el archivo normalmente
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.
¿Por qué es necesario detener los almacenamientos intermedios existentes? Buffers de salida en PHP stack: http://php.net/ob_start –
No lo es - Simplemente no había notado la capacidad de apilamiento. Editando mi respuesta. – timdev
Probar file_get_contents()
.
Esta función es similar a
file()
, excepto quefile_get_contents()
devuelve el archivo en una cadena.
Definitivamente la mejor respuesta aquí. Corto. Inteligente. –
intentar algo como:
ob_start();
include('test.php');
$content = ob_get_clean();
Puede utilizar la función file_get_contents
.
Me pregunto por qué la gente sugiere el almacenamiento en búfer de salida cuando es mucho más simple. –
Quizás porque file_get_contents no ejecuta el código PHP en el archivo? – fool4jesus
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.phpdel 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()
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
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
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.
¿Puedes ser más prolijo? –
¿Qué es lo que quieres lograr? Que el contenido de test.php se almacena en $ test? – Boldewyn