Wie lade ich eine PHP-Datei in eine Variable?

98

Ich muss eine PHP-Datei in eine Variable laden. Mögeninclude();

Ich habe eine einfache HTML-Datei wie folgt geladen:

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

Aber jetzt muss ich eine PHP-Datei laden.

Kombuwa
quelle

Antworten:

116

Ich nehme an, Sie möchten den von PHP generierten Inhalt erhalten , wenn ja:

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

Andernfalls entspricht der Quellcode der PHP-Datei einer TXT-Datei:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');
Alix Axel
quelle
6
Was ist, wenn ich "den von PHP generierten Inhalt" ohne Verwendung von http erhalten und den Pfad direkt verwenden möchte?
Osa
4
@Osa: Abhängig von Ihren Anforderungen könnten Sie wahrscheinlich eval()oder wenn Sie mit komplizierterem Code arbeiten: github.com/nikic/PHP-Parser .
Alix Axel
2
Die Implementierung eines PHP-Parsers nur dafür scheint ein großer Overkill zu sein
David Fariña
1
Ich sehe nicht, wie dies den POST oder GET passieren wird. Ich denke, neobies Antwort wäre korrekter und angemessener, da die externe PHP-Datei im Kontext der aktuellen verarbeitet würde.
ADTC
Im obigen Beispiel können Sie get_template_directory_uri () verwenden und sich Ihrem Dateipfad anschließen. Dadurch wird das Problem der Verwendung eines direkten Pfads gelöst. $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
quelle
1
Das funktioniert! Aber wann immer ich versuche einzuschließen: yourfile.php? Id = 3 wird es nicht funktionieren. Irgendwelche Vorschläge?
tvgemert
1
Da Sie http nicht mehr verwenden, müssen Sie in diesem Fall Werte über $ _GET übergeben.
Francesco Belladonna
Wie wäre es mit den Bildern?
kta
1
Tipp: Seit PHP 4.3.0 können Sie die letzten beiden Zeilen auf nur $myvar = ob_get_clean();(siehe ob_get_clean Dokumentation )
kürzen
Perfekt! Danke dir.
Lowtechsun
7

Wenn Sie http: // verwenden , wie von eyze vorgeschlagen, können Sie nur die Ausgabe des PHP-Skripts lesen. Sie können das PHP-Skript selbst nur lesen, wenn es sich auf demselben Server befindet wie Ihr laufendes Skript. Sie könnten dann so etwas verwenden

$Vdata = file_get_contents('/path/to/your/file.php");
Jonathan Weiss
quelle
Hallo, das bekommt nur statisches HTML. siehe dieses Beispiel. Wenn dies die Datei ist, die wir laden werden. ////////////////// <? php echo ("text1"); ?> Text2 //////////////// das ist die Ausgabe, die ich bekommen habe; /////////////////////
Text2
@Kombuwa, könnten Sie bitte Ihre Antwort in einer Bearbeitung Ihrer ursprünglichen Frage klären, in der Sie mehr Platz haben, um dies klar zu erklären? Danke =)
David sagt, Monica
7

Wenn Sie die Datei laden möchten, ohne sie über den Webserver auszuführen, sollte Folgendes funktionieren.

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

Dadurch wird der Dateiinhalt geladen und ausgewertet. Die PHP-Datei muss vollständig mit <?phpund ?>Tags erstellt werden, damit evalsie ausgewertet werden kann.

Jess
quelle
Ich mag diese Methode. Nur dass meine Datei nicht vollständig mit <? Php- und?> -Tags erstellt ist, damit eval sie auswerten kann. Gibt es einen anderen Weg?
ItsMeDom
4

Theoretisch könnten Sie einfach fopen und dann stream_get_contents verwenden.

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

Das sollte die gesamte Datei für Sie in $ string einlesen und nicht auswerten. Obwohl ich überrascht bin, dass file_get_contents nicht funktioniert hat, als Sie den lokalen Pfad angegeben haben ...

Zeroshade
quelle
3

Alternativ können Sie die Ausgabepufferung starten, ein Include / Require ausführen und dann die Pufferung beenden. Mit ob_get_contents () können Sie einfach das Material, das von dieser anderen PHP-Datei ausgegeben wurde, in eine Variable übertragen.

Alex Weinstein
quelle
3

Wenn Ihre Datei eine return-Anweisung wie folgt hat:

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

Sie können dies zu einer Variablen wie dieser bringen:

$data = include $filePath;
António Almeida
quelle
1
plus1 Danke, das habe ich gesucht
whitesiroi
1

file_get_contents () funktioniert nicht, wenn auf Ihrem Server allow_url_fopen deaktiviert ist . Bei den meisten gemeinsam genutzten Webhosts ist diese aus Sicherheitsgründen standardmäßig deaktiviert. In PHP6 ist außerdem allow_url_fopen Option nicht mehr vorhanden und alle Funktionen verhalten sich so, als ob sie dauerhaft deaktiviert sind. Dies ist also eine sehr schlechte Methode.

Die beste Option, wenn Sie über http auf die Datei zugreifen, ist cURL

Kennzeichen
quelle