2012-06-27 7 views
7

Ho un file documento contenente il codice HTML. Voglio assegnare il contenuto dell'intero file a una variabile PHP.Come assegnare il contenuto di un file in una variabile in PHP

ho questa riga di codice:

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

Quando faccio un var_dump() ottengo string(1) "'"

E 'possibile assegnare il contenuto di un file in una variabile?

[Nota: il motivo è che voglio separare il segmento del corpo di un messaggio di posta dallo script del mailer - un po 'come un modello, quindi l'utente modifica semplicemente il codice HTML e non ha bisogno di essere interessato al mio script mailer. Così sto incluso il file come l'intero segmento del corpo su mail($to, $subject, $body, $headers, $return_path);

Grazie.

+0

Nel file questo è incluso, ci sono delle operazioni PHP, o è solo testo? – lonesomeday

+0

Sì @lonesomeday ... Qualcosa che non ho menzionato nella Q è che il mio file email_template.php contiene php incorporato. Quindi ho pensato che dovevo includerlo() piuttosto che file_get_contents(). È vero, get_file-contents() viene comunque analizzato come php? –

risposta

19

Se c'è il codice PHP che deve essere eseguito, non davvero bisogno di usare include. Tuttavia, include non restituirà l'output dal file; verrà emesso nel browser. È necessario utilizzare una funzione PHP denominata buffer di output: cattura tutti gli output inviati da uno script. È quindi possibile accedere e utilizzare questi dati:

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, proverò con il "metodo folle" @lonesomeday ... –

+0

Qual è la differenza tra "ob_get_clean()" e "ob_end_flush()"? Quale è il migliore da usare nel mio caso? –

+0

@ Dr.DOT 'ob_get_clean' restituisce il contenuto. 'ob_end_flush' interrompe il buffering e invia l'output al browser e restituisce un valore booleano. 'ob_end_flush' non è quello che vuoi qui. – lonesomeday

10

Si deve usare file_get_contents():

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

include è compreso e l'esecuzione email_template.php nel file corrente, e memorizzare il valore di ritorno di include()-$body1.

Se avete bisogno di eseguire codice PHP all'interno del di file, è possibile fare uso di output control:

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

Grazie a @TimCooper. Qualcosa che non ho menzionato nella Q è che il mio file email_template.php contiene php incorporato. Quindi ho pensato che dovevo includerlo() piuttosto che file_get_contents(). È vero, get_file-contents() viene comunque analizzato come php? –

+0

@ Dr.DOT: vedere le informazioni aggiuntive nella mia risposta. –

2

file_get_contents()

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

Oppure, se sei folle:

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

Come altri hanno scritto, utilizzare file_get_contents se quel file doesn' t devono essere eseguiti in qualsiasi modo.

In alternativa è possibile effettuare la comprendono tornare l'uscita con l'istruzione return.

Se il includono si occupa di elaborazione e uscite con eco [ndr: modalità o lasciando PHP parsing] affermazioni si può anche tamponare l'uscita.

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

TimCooper mi ha battuto. : P

+0

Ti ho upvoted @EPB - grazie per aver postato –

0

Sì, è possibile è facile.

Nel file che si desidera utilizzare il posto variabile di questo

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

Nel file si chiamano posto /myfile.php questo

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

Grazie Daniel

+0

Tecnicamente il trucco è definire il nome della variabile prima di require_once del file, quindi puoi disinserire la variabile per evitare che sovrascriva altre parti del tuo script se necessario o puoi lasciarla come qualsiasi altra variabile. –

Problemi correlati