Come carico un file PHP in una variabile?


98

Devo caricare un file PHP in una variabile. Piaceinclude();

Ho caricato un semplice file HTML come questo:

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

Ma ora ho bisogno di caricare un file PHP.

Risposte:


116

Suppongo che tu voglia ottenere il contenuto generato da PHP , in tal caso usa:

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

Altrimenti, se vuoi ottenere il codice sorgente del file PHP , è lo stesso di un file .txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');

6
cosa succede se voglio ottenere "il contenuto generato da PHP" senza utilizzare http e utilizzare direttamente il percorso?
Osa

4
@Osa: A seconda delle tue esigenze, potresti probabilmente usare eval()o se hai a che fare con codice più complicato: github.com/nikic/PHP-Parser .
Alix Axel

2
implementare un parser php solo per questo sembra un enorme sovraccarico
David Fariña il

1
Non vedo come questo passerà il POST o GET. Penso che la risposta di neobie sarebbe più corretta e appropriata, poiché il file PHP esterno verrebbe elaborato nel contesto di quello corrente.
ADTC

Usando l'esempio sopra puoi usare get_template_directory_uri () e unirti al percorso del tuo file. Questo risolverà il problema dell'utilizzo di un percorso diretto. $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
Che funzioni! Ma ogni volta che provo a includere: yourfile.php? Id = 3 non funzionerà. Eventuali suggerimenti?
tvgemert

1
Poiché non stai più utilizzando http, in questo caso devi passare i valori tramite $ _GET.
Francesco Belladonna

E le immagini?
kta

1
Suggerimento: a partire da PHP 4.3.0, puoi accorciare le ultime due righe a $myvar = ob_get_clean();(vedi la documentazione ob_get_clean )
ADTC

Perfetto! Grazie.
lowtechsun

7

Se stai usando http: // , come suggerito da eyze, sarai in grado di leggere solo l'uscita dello script PHP. Puoi leggere lo script PHP stesso solo se si trova sullo stesso server dello script in esecuzione. Potresti quindi usare qualcosa di simile

$Vdata = file_get_contents('/path/to/your/file.php");

ciao, ottieni solo html statico. guarda questo esempio. se questo è il file che andremo a caricare; ///////////////// <? php echo ("text1"); ?> Text2 /////////////// questo è il risultato che ho ottenuto; //////////////////// Text2 ///////////////////
Kombuwa

@ Kombuwa, potresti, per favore, chiarire la tua risposta in una modifica alla tua domanda originale, dove hai più spazio per spiegare chiaramente? Grazie =)
David dice di reintegrare Monica il

7

Se vuoi caricare il file senza eseguirlo attraverso il webserver, dovrebbe funzionare quanto segue.

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

Questo caricherà quindi valuterà il contenuto del file. Il file PHP dovrà essere completamente formato con tag <?phpe ?>per evalvalutarlo.


Mi piace questo metodo. Solo che il mio file non è completamente formato con i tag <? Php e?> Per eval per valutarlo. C'è un altro modo?
ItsMeDom

Non funziona se scrivi codice php in quel file.php
Fernando Torres

4

Teoricamente potresti semplicemente usare fopen, quindi usare stream_get_contents.

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

Questo dovrebbe leggere l'intero file in $ string per te e non dovrebbe valutarlo. Anche se sono sorpreso che file_get_contents non abbia funzionato quando hai specificato il percorso locale ...


3

In alternativa, è possibile avviare il buffering dell'output, eseguire un'inclusione / richiesta e quindi interrompere il buffering. Con ob_get_contents (), puoi semplicemente ottenere il materiale che è stato emesso da quell'altro file PHP in una variabile.


3

Se il tuo file ha una dichiarazione di ritorno come questa:

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

Puoi ottenerlo a una variabile come questa:

$data = include $filePath;

1
plus1 Grazie, questo è quello che stavo cercando
whitesiroi

1

file_get_contents () non funzionerà se il tuo server ha allow_url_fopen disattivato. La maggior parte degli host web condivisi lo hanno disattivato per impostazione predefinita a causa di rischi per la sicurezza. Inoltre, in PHP6 , il file allow_url_fopen opzione non esisterà più e tutte le funzioni agiranno come se fosse permanentemente disattivata. Quindi questo è un pessimo metodo da usare.

La tua migliore opzione da usare se stai accedendo al file tramite http è cURL

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.