¿Cómo cargo un archivo PHP en una variable?

98

Necesito cargar un archivo PHP en una variable. Me gustainclude();

He cargado un archivo HTML simple como este:

$Vdata = file_get_contents("textfile.txt");

Pero ahora necesito cargar un archivo PHP.

Kombuwa
fuente

Respuestas:

116

Supongo que desea obtener el contenido generado por PHP , si es así, use:

$Vdata = file_get_contents('http://YOUR_HOST/YOUR/FILE.php');

De lo contrario, si desea obtener el código fuente del archivo PHP , es lo mismo que un archivo .txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');
Alix Axel
fuente
6
¿Qué pasa si quiero obtener "el contenido generado por PHP" sin usar http y usar directamente la ruta?
Osa
4
@Osa: Dependiendo de sus necesidades, probablemente podría usar eval()o si está tratando con un código más complicado: github.com/nikic/PHP-Parser .
Alix Axel
2
implementar un analizador php solo para eso parece una gran exageración
David Fariña
1
No veo cómo esto pasará el POST o GET. Creo que la respuesta de neobie sería más correcta y apropiada, ya que el archivo PHP externo se procesaría en el contexto del actual.
ADTC
Usando el ejemplo anterior, puede usar get_template_directory_uri () y unirse a la ruta de su archivo. Esto resolverá el problema de usar una ruta directa. $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
Ian Bruce
124
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean ()

neobie
fuente
1
¡Eso funciona! Pero cada vez que intento incluir: yourfile.php? Id = 3 no funcionará. ¿Alguna sugerencia?
tvgemert
1
Debido a que ya no está usando http, debe pasar valores a través de $ _GET en ese caso.
Francesco Belladonna
¿Qué tal las imágenes?
kta
1
Consejo: desde PHP 4.3.0, puede acortar las últimas dos líneas a solo $myvar = ob_get_clean();(consulte la documentación de ob_get_clean )
ADTC
¡Perfecto! Gracias.
lowtechsun
7

Si está utilizando http: // , como sugirió eyze, solo podrá leer la salida del script PHP. Solo puede leer el script PHP en sí mismo si está en el mismo servidor que el script en ejecución. Entonces podrías usar algo como

$Vdata = file_get_contents('/path/to/your/file.php");
Jonathan Weiss
fuente
hola esto solo recibe html estático. mira este ejemplo. si este es el archivo que vamos a cargar; ///////////////// <? php echo ("texto1"); ?> Text2 /////////////// este es el resultado que obtuve; ////////////////////// Texto2 ///////////////////
Kombuwa
@Kombuwa, ¿podría, por favor, aclarar su respuesta en una edición a su pregunta original, donde tiene más espacio para explicar claramente? Gracias =)
David dice reinstalar a Monica
7

Si desea cargar el archivo sin ejecutarlo a través del servidor web, lo siguiente debería funcionar.

$string = eval(file_get_contents("file.php"));

Esto cargará y luego evaluará el contenido del archivo. El archivo PHP deberá estar completamente formado con etiquetas <?phpy ?>para evalpoder evaluarlo.

Encadenar
fuente
Me gusta este metodo. Solo que mi archivo no está completamente formado con etiquetas <? Php y?> Para que eval lo evalúe. ¿Hay alguna otra manera?
ItsMeDom
No funciona si escribe código php en ese archivo.php
Fernando Torres hace
4

En teoría, podría usar fopen y luego usar stream_get_contents.

$stream = fopen("file.php","r");
$string = stream_get_contents($stream);
fclose($stream);

Eso debería leer todo el archivo en $ string por usted, y no debería evaluarlo. Aunque me sorprende que file_get_contents no funcionara cuando especificaste la ruta local ...

Zeroshade
fuente
3

Alternativamente, puede iniciar el almacenamiento en búfer de salida, realizar una inclusión / solicitud y luego detener el almacenamiento en búfer. Con ob_get_contents (), puede simplemente obtener el material generado por ese otro archivo PHP en una variable.

Alex Weinstein
fuente
3

Si su archivo tiene una declaración de devolución como esta:

<?php return array(
  'AF' => 'Afeganistão',
  'ZA' => 'África do Sul',
  ...
  'ZW' => 'Zimbabué'
);

Puede llevar esto a una variable como esta:

$data = include $filePath;
António Almeida
fuente
1
plus1 Gracias, esto es lo que estaba buscando
whitesiroi
1

file_get_contents () no funcionará si su servidor tiene allow_url_fopen desactivado. La mayoría de los servidores web compartidos lo tienen desactivado de forma predeterminada debido a riesgos de seguridad. Además, en PHP6 , la opción allow_url_fopen ya no existirá y todas las funciones actuarán como si estuviera permanentemente desactivada. Así que este es un método muy malo para usar.

Su mejor opción para usar si está accediendo al archivo a través de http es cURL

marca
fuente