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.

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');

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 ()


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");

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.


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 ...


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.


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;

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.