2009-11-28 14 views
20

Diciamo che il file test.php si presenta così:Ottieni i risultati di un inclusione in una stringa in PHP?

<?php 
echo 'Hello world.'; 
?> 

voglio fare qualcosa di simile:

$test = include('test.php'); 

echo $test; 

// Hello world. 

Qualcuno può puntare a me la strada giusta?

Edit:

Il mio obiettivo iniziale era quello di tirare il codice PHP mescolati con l'HTML da un database e di processo. Ecco cosa ho finito per fare:

// Go through all of the code, execute it, and incorporate the results into the content 
while(preg_match('/<\?php(.*?)\?>/ims', $content->content, $phpCodeMatches) != 0) { 
    // Start an output buffer and capture the results of the PHP code 
    ob_start(); 
    eval($phpCodeMatches[1]); 
    $output = ob_get_clean(); 

    // Incorporate the results into the content 
    $content->content = str_replace($phpCodeMatches[0], $output, $content->content); 
} 

risposta

49

Utilizzare output buffering è la soluzione migliore.


ob_start(); 
include 'test.php'; 
$output = ob_get_clean(); 

PS: Ricordare che è possibile nidificare i buffer di uscita per il contenuto del cuore, se necessario.

+6

salvare una riga: '$ output = ob_get_clean();' ;-) –

+0

Impressionante, grazie! –

4

È anche possibile fare in modo che il file incluso restituisca l'output anziché stamparlo. Quindi puoi prenderlo in una variabile, proprio come fai nel tuo secondo esempio.

<?php 
    return 'Hello world.'; 
?> 
-4
$test = file_get_contents('test.php'); 
echo $test; //Outputs "Hello world."; 
+1

Questo non analizzerà il PHP in test.php, basta stamparlo. E fare un eval() sulla stringa sarebbe più lento che usare un include con il buffering dell'output. – Slashterix

7

test.php

<?php 

return 'Hello World'; 

?> 

<?php 

$t = include('test.php'); 

echo $t; 

?> 

Finché il file incluso ha una dichiarazione di ritorno che funzionerà.

Problemi correlati