2012-06-27 14 views
7

Tengo un archivo de documento que contiene marcas HTML. Quiero asignar los contenidos del archivo completo a una variable de PHP.Cómo asignar el contenido de un archivo a una variable en PHP

que tienen esta línea de código:

$body = include('email_template.php');

Cuando hago un var_dump() Puedo obtener string(1) "'"

¿Es posible asignar los contenidos de un archivo a una variable?

[Nota: la razón para hacer esto es que quiero separar el segmento del cuerpo de un mensaje de correo del script del remitente - algo así como una plantilla para que el usuario simplemente modifique el marcado HTML y no necesita ser preocupado con mi script de correo. Así que estoy incluyendo el archivo como el segmento de todo el cuerpo en mail($to, $subject, $body, $headers, $return_path);

Gracias.

+0

En el archivo eso está incluido, ¿hay alguna operación PHP, o es solo texto plano? – lonesomeday

+0

Sí @lonesomeday ... Algo que no mencioné en la Q es que mi archivo email_template.php contiene php incorporado. Así que pensé que necesitaba incluir() en lugar de file_get_contents(). ¿Es eso cierto, get_file-contents() aún analizará como php? –

Respuesta

19

Si hay que ejecutar código PHP, de hecho necesita usar include. Sin embargo, include no devolverá la salida del archivo; se emitirá al navegador. Necesita usar una característica de PHP llamada buffer de salida: esto captura toda la salida enviada por un script. A continuación, puede acceder y utilizar esta información:

ob_start();      // start capturing output 
include('email_template.php'); // execute the file 
$content = ob_get_contents(); // get the contents from the buffer 
ob_end_clean();     // stop buffering and discard contents 
+1

Ok, probaré el "método insano" @lonesomeday ... –

+0

¿Cuál es la diferencia entre 'ob_get_clean()' y 'ob_end_flush()'? ¿Cuál es mejor usar en mi caso? –

+0

@ Dr.DOT 'ob_get_clean' devuelve el contenido. 'ob_end_flush' detiene el almacenamiento en búfer y envía la salida al navegador y devuelve un valor booleano. 'ob_end_flush' no es lo que quieres aquí. – lonesomeday

10

Debería utilizar file_get_contents():

$body1 = file_get_contents('email_template.php'); 

include está incluyendo y ejecutar email_template.php en su archivo actual, y almacenar el valor de retorno de include()-$body1.

Si necesita ejecutar código PHP dentro de la del archivo, puede hacer uso de output control:

ob_start(); 
include 'email_template.php'; 
$body1 = ob_get_clean(); 
+0

Gracias @TimCooper. Algo que no mencioné en la Q es que mi archivo email_template.php contiene php incorporado. Así que pensé que necesitaba incluir() en lugar de file_get_contents(). ¿Es eso cierto, get_file-contents() aún analizará como php? –

+0

@ Dr.DOT: Vea la información adicional en mi respuesta. –

2

file_get_contents()

$file = file_get_contents('email_template.php'); 

O, si estás loco :

ob_start(); 
include('email_template.php'); 
$file = ob_end_flush(); 
1

Como otros han publicado, utilice file_get_contents si ese archivo doesn' Necesito ser ejecutado de cualquier manera.

Como alternativa, puede hacer que su inclusión devuelva la salida con la declaración de devolución.

Si su include realiza procesamientos y salidas con instrucciones echo [ed: o leaving PHP parsing mode], también puede almacenar en búfer la salida.

ob_start(); 
include('email_template.php'); 
$body1 = ob_get_clean(); 

TimCooper me pegó a él. : P

+0

Te he votado por votación @EPB - gracias por publicar –

0

Sí, puede que sea fácil.

En el archivo que desea utilizar la variable de este lugar

require_once ‘/myfile.php'; 
if(isset($responseBody)) { 
    echo $responseBody; 
    unset($responseBody); 
}  

En el archivo que están llamando a cabo este /myfile.php

$responseBody = 'Hello world, I am a genius'; 

Gracias Daniel

+0

Técnicamente, el truco es definir el nombre de la variable antes de requerir_un solo el archivo, luego puede desarmar la variable para evitar que sobrescriba otras partes de su script si es necesario o puede dejarlo como cualquier otro variable. –

Cuestiones relacionadas