ho provato:Come definisci un PHP include come stringa?
$test = include 'test.php';
Ma che appena incluso il file normalmente
ho provato:Come definisci un PHP include come stringa?
$test = include 'test.php';
Ma che appena incluso il file normalmente
Ti consigliamo di guardare la funzione di buffer.
//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:
Come Jeremy sottolinea, pila buffer di uscita. Quindi potresti teoricamente fare qualcosa del tipo:
<?PHP
function return_output($file){
ob_start();
include $file;
return ob_get_clean();
}
$content = return_output('some/file.php');
Questo dovrebbe essere equivalente alla mia soluzione più verbosa originale.
Ma non mi sono preso la briga di testare questo.
Perché è necessario interrompere eventuali buffer esistenti? Buffer di output nello stack PHP: http://php.net/ob_start –
Non lo è - non avevo notato l'impilabilità. Modifica la mia risposta. – timdev
Prova file_get_contents()
.
Questa funzione è simile a
file()
, tranne chefile_get_contents()
restituisce il file in una stringa.
Sicuramente la migliore risposta qui. Corto. Inteligente. –
provare qualcosa di simile:
ob_start();
include('test.php');
$content = ob_get_clean();
È possibile utilizzare la funzione file_get_contents
.
Mi chiedo perché la gente suggerisca il buffering dell'output quando questo è molto più semplice. –
Forse perché file_get_contents non esegue il codice PHP nel file? – fool4jesus
Soluzione # 1: Fare uso di include (funziona come una funzione): [Il mio migliore soluzione] index.php
File: included.php
<?php
$bar = 'BAR';
$php_file = include 'included.php';
print $php_file;
?>
File:
<?php
$foo = 'FOO';
return $foo.' '.$bar;
?>
<p>test HTML</p>
Questo emetterà FOO BAR
, ma Nota: Lavoro s come una funzione, in modo RETURN pass contenuti torna alla variabile (<p>test HTML</p>
saranno persi nel sopra)
Soluzione # 2: op_buffer():
index.phpFile:
<?php
$bar = 'BAR';
ob_start();
include 'included.php';
$test_file = ob_get_clean(); //note on ob_get_contents below
print $test_file;
?>
File incluso.php:
<?php
$foo = 'FOO';
print $foo.' '.$bar;
?>
<p>test HTML</p>
Se si utilizza ob_get_contents()
sarà uscita FOO BAR<p>test HTML</p>
DUE VOLTE, assicurarsi di utilizzare ob_get_clean()
Soluzione # 3: file_get_contents():
registro nella cartella. php:
<?php
$bar = 'BAR';
$test_file = eval(file_get_contents('included.php'));
print $test_file;
?>
included.php
File:
$foo = 'FOO';
print $foo.' '.$bar;
Questa uscita volontà FOO BAR
, ma Nota: Include.php non dovrebbe avere <?php
di apertura e chiusura tag come si esegue attraverso eval()
L'unico motivo per cui il buffer viene emesso due volte è se il buffer non è stato trattenuto e quindi pulito prima della fine del file, il che significa che il buffer viene automaticamente echeggiato. Forse è questo il problema che hai avuto. – worldofjr
Aah, grazie @worldofjr, non eri molto specifico ma mi hai indicato nella giusta direzione su OB; 'ob_get_contents()' dovrebbe essere 'ob_get_clean()' altrimenti viene emesso due volte. Rispondi essere modificato di conseguenza. – Duncanmoo
Il altre risposte, per ragioni a me sconosciute, non raggiungono abbastanza la soluzione corretta.
Suggerisco di utilizzare il buffer, ma è necessario ottenere il contenuto e quindi pulire il buffer prima della fine della pagina, altrimenti viene emesso. Se si desidera utilizzare l'output dal file incluso, è necessario utilizzare op_get_contents()
, che restituirà una stringa del contenuto del buffer.
Inoltre, non è necessario eseguire il looping degli include, poiché ciascuno aggiungerà al buffer (a meno che non lo si pulisca prima).
È quindi possibile utilizzare quanto segue;
ob_start();
include_once('test.php');
include_once('test2.php');
$contents = ob_get_contents();
ob_end_clean();
Spero che questo aiuti.
Puoi essere più dettagliato? –
Cosa vuoi ottenere? Che il contenuto di test.php è archiviato in $ test? – Boldewyn