2012-01-05 16 views
15

¿es posible hacer algo como esto?Incluir archivo PHP como cadena

// file.php 
$string = require('otherfile.php'); 
echo $string; 

// otherfile.php 
<!DOCTYPE html> 
<html> 
<head><title>Test</title></head> 
<body> 
<?php require 'body.php';?> 
</body> 
</html> 

// body.php 
<p>Lorem ipsum something</p> 

¿Y obtener esta salida?

<!DOCTYPE html> 
<html> 
<head><title>Test</title></head> 
<body> 
<p>Lorem ipsum something</p> 
</body> 
</html> 

Sé que el código no funcionará, pero espero que entiendas lo que quiero decir.

+1

Ver: http://stackoverflow.com/questions/1683771/execute-a-php-file-and-return-the-result-as-a-string – BeRecursive

+0

Esto se parece un poco a que usted está reinventando plantillas. ¿Tal vez puedas usar un motor de plantillas? –

+0

Creo que los motores de plantillas estaban reinventando PHP, pero es una cuestión de opinión :) – Yaniro

Respuesta

39

archivo.php

ob_start(); 
include 'otherfile.php'; 
$string = ob_get_clean(); 
+1

Hay una función parse() en el sitio PHP en http://www.php.net/manual/en/function.ob-start.php que agrega informes de errores y le permite pasar variables al archivo de plantilla. – Bink

+1

Esta solución es mejor que Mark Bakers, si quieres ejecutar código PHP dentro de otherfile.php – Gmeister4

+1

Esto funcionó perfectamente para mí dentro de mi plugin de WordPress, donde estoy llamando a un archivo de inclusión dentro de un shortcode.Gracias @SmokeyPHP –

-2
<?php require "otherfile.php"; 
+0

Supongo que no entendiste lo que dije – SnackerSWE

+0

-1'd Ciertamente parece que has entendido mal la pregunta; @SnackerSWE estaba buscando incluir un archivo, tener su php analizado y luego obtenerlo como una cadena, pero no incluirlo en la página actual. –

0

Sí, se puede utilizar una instrucción de retorno en un archivo, y requiere e incluye devolverá el valor devuelto, pero que habría que modificar el archivo para decir algo más como

<?php 
    return '<p>Lorem ipsum something</p>'; 
?> 

cheque ejemplo # 5 bajo incluyen documentación http://www.php.net/manual/en/function.include.php

3

Otra cosa interesante que saber, pero la respuesta de SmokeyPHP podría ser mejor:

<?php 
$var = require 'myfile.php'; 

myfile.php:

<?php 
return 'mystring'; 
9
$string = file_get_contents('otherfile.php',TRUE); 
echo $string 

uso del argumento TRUE para file_get_contents() significa que buscará el uso la ruta de inclusión, como una inclusión normal o requiere

+1

Si hay PHP en este archivo no va a ser interpretado, necesitarás usar eval o algo similar. – Manhim

+1

Manhim, soy consciente de que necesitaría evadirse (o emborracharse si se hace eco para mostrarlo) ... esa fue mi lectura de lo que OP quería. –

1

Supongo que ya ha resuelto el problema. Me enfrenté a la misma cuestión durante estos días y he encontrado una solución bastante usando eval, file_get_contents y funciones de almacenamiento intermedio de salida:

ob_start(); 
eval('?>' . file_get_contents($fileToRequire, TRUE) . '<?php '); 
$this->output = ob_get_contents(); 
ob_end_clean(); 

La única cosa que uno debe cuidar es poner código PHP entre las etiquetas <?php ?> y no dejan cualquier etiqueta php abierta.

'?>' Es obligatorio lo contrario obtendrá el error de la función eval

espero que ayude!

¡Salud!