Jak załadować plik PHP do zmiennej?

99

Muszę załadować plik PHP do zmiennej. Lubićinclude();

Załadowałem prosty plik HTML, taki jak ten:

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

Ale teraz muszę załadować plik PHP.

Kombuwa
źródło

Odpowiedzi:

116

Przypuszczam, że chcesz uzyskać zawartość wygenerowaną przez PHP , jeśli tak, użyj:

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

W przeciwnym razie, jeśli chcesz pobrać kod źródłowy pliku PHP , jest to to samo, co plik .txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');
Alix Axel
źródło
6
co jeśli chcę uzyskać „zawartość generowaną przez PHP” bez użycia protokołu http i bezpośrednio użyć ścieżki?
Osa,
4
@Osa: W zależności od potrzeb, prawdopodobnie możesz użyć eval()lub jeśli masz do czynienia z bardziej skomplikowanym kodem: github.com/nikic/PHP-Parser .
Alix Axel,
2
implementacja parsera php tylko po to, wydaje się być ogromną przesadą
David Fariña
1
Nie widzę, jak to przejdzie przez POST lub GET. Myślę, że odpowiedź neobie byłaby bardziej poprawna i odpowiednia, ponieważ zewnętrzny plik PHP byłby przetwarzany w kontekście bieżącego.
ADTC
Korzystając z powyższego przykładu, możesz użyć get_template_directory_uri () i dołączyć do ścieżki pliku. To rozwiąże problem korzystania z bezpośredniej ścieżki. $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
źródło
1
To działa! Ale ilekroć spróbuję dołączyć: yourfile.php? Id = 3, to nie zadziała. Jakieś sugestie?
tvgemert
1
Ponieważ nie używasz już protokołu http, w takim przypadku musisz przekazywać wartości przez $ _GET.
Francesco Belladonna
A co z obrazami?
kta
1
Wskazówka: od PHP 4.3.0 możesz skrócić ostatnie dwie linie do just $myvar = ob_get_clean();(patrz dokumentacja ob_get_clean )
ADTC
Idealny! Dziękuję Ci.
lowtechsun
8

Jeśli używasz http: // , jak sugerował eyze, będziesz mógł odczytać tylko wyjście skryptu PHP. Możesz odczytać sam skrypt PHP tylko wtedy, gdy znajduje się on na tym samym serwerze, co uruchomiony skrypt. Możesz wtedy użyć czegoś takiego

$Vdata = file_get_contents('/path/to/your/file.php");
Jonathan Weiss
źródło
cześć, otrzymuję tylko statyczny html. zobacz ten przykład. jeśli to jest plik, który zamierzamy załadować; ///////////////// <? php echo ("text1"); ?> Text2 /////////////// To jest wyjście, które otrzymałem; //////////////////// Text2 /////////////////////
Kombuwa
@Kombuwa, czy mógłbyś, proszę, wyjaśnić swoją odpowiedź w edycji na swoje pierwotne pytanie, gdzie masz więcej miejsca na jasne wyjaśnienie? Dzięki =)
David mówi, że przywróć Monikę
7

Jeśli chcesz załadować plik bez uruchamiania go przez serwer WWW, następujące czynności powinny działać.

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

Spowoduje to załadowanie, a następnie ocenę zawartości pliku. Plik PHP będzie musiał być w pełni sformatowany z rozszerzeniem<?php?> tagami i , evalaby go ocenić.

Pęto
źródło
Podoba mi się ta metoda. Tylko, że mój plik nie jest w pełni sformatowany przy użyciu tagów <? Php i?>, Aby eval mógł go ocenić. Czy jest inny sposób?
ItsMeDom
To nie zadziała, jeśli napiszesz kod php w tym pliku. Php
Fernando Torres
4

Teoretycznie możesz po prostu użyć fopen, a następnie użyć stream_get_contents.

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

To powinno wczytać cały plik do ciągu $ string i nie powinno go oceniać. Chociaż jestem zaskoczony, że file_get_contents nie działało, gdy określono ścieżkę lokalną ....

Zeroshade
źródło
3

Alternatywnie możesz rozpocząć buforowanie danych wyjściowych, wykonać dołączanie / wymaganie, a następnie zatrzymać buforowanie. Za pomocą ob_get_contents () możesz po prostu przenieść zawartość tego innego pliku PHP do zmiennej.

Alex Weinstein
źródło
3

Jeśli twój plik zawiera instrukcję zwrotu, taką jak ta:

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

Możesz to dostać do zmiennej takiej jak ta:

$data = include $filePath;
António Almeida
źródło
1
plus1 Dziękuję, właśnie tego szukałem
whitesiroi
1

file_get_contents () nie będzie działać, jeśli twój serwer ma wyłączone allow_url_fopen . Większość współdzielonych hostów internetowych ma to domyślnie wyłączone ze względu na zagrożenia bezpieczeństwa. Również w PHP6 The allow_url_fopen opcja nie będzie już istnieć, a wszystkie funkcje będą działać tak, jakby ona trwale wyłączona. Jest to więc bardzo zła metoda w użyciu.

Najlepszą opcją do użycia, jeśli uzyskujesz dostęp do pliku przez http, jest cURL

znak
źródło