Comment charger un fichier PHP dans une variable?

99

J'ai besoin de charger un fichier PHP dans une variable. Commeinclude();

J'ai chargé un simple fichier HTML comme celui-ci:

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

Mais maintenant, je dois charger un fichier PHP.

Kombuwa
la source

Réponses:

116

Je suppose que vous souhaitez obtenir le contenu généré par PHP , si c'est le cas, utilisez:

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

Sinon, si vous souhaitez obtenir le code source du fichier PHP , c'est le même qu'un fichier .txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');
Alix Axel
la source
6
que faire si je veux obtenir "le contenu généré par PHP" sans utiliser http et utiliser directement le chemin?
Osa
4
@Osa: Selon vos besoins, vous pourriez probablement utiliser eval()ou si vous avez affaire à du code plus compliqué: github.com/nikic/PHP-Parser .
Alix Axel
2
implémenter un analyseur php juste pour cela semble être une énorme exagération
David Fariña
1
Je ne vois pas comment cela passera le POST ou GET. Je pense que la réponse de neobie serait plus correcte et appropriée, puisque le fichier PHP externe serait traité dans le contexte du fichier actuel.
ADTC
En utilisant l'exemple ci-dessus, vous pouvez utiliser get_template_directory_uri () et joindre à votre chemin de fichier. Cela résoudra le problème de l'utilisation d'un chemin direct. $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
Ian Bruce le
124
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean ()

néobie
la source
1
Ça marche! Mais chaque fois que j'essaye d'inclure: yourfile.php? Id = 3 cela ne fonctionnera pas. Aucune suggestion?
tvgemert
1
Comme vous n'utilisez plus http, vous devez dans ce cas transmettre des valeurs via $ _GET.
Francesco Belladonna
Et les images?
kta
1
Pointe: depuis PHP 4.3.0, vous pouvez raccourcir les deux dernières lignes à juste $myvar = ob_get_clean();(voir la documentation ob_get_clean )
ADTC
Parfait! Je vous remercie.
lowtechsun
8

Si vous utilisez http: // , comme le suggère eyze, vous ne pourrez lire que la sortie du script PHP. Vous ne pouvez lire le script PHP lui-même que s'il se trouve sur le même serveur que votre script en cours d'exécution. Vous pouvez alors utiliser quelque chose comme

$Vdata = file_get_contents('/path/to/your/file.php");
Jonathan Weiss
la source
salut cela ne reçoit que du HTML statique. voir cet exemple. si c'est le fichier que nous allons charger; ///////////////// <? php echo ("text1"); ?> Text2 /////////////// c'est la sortie que j'ai obtenue; //////////////////// Text2 /////////////////////
Kombuwa
@Kombuwa, pourriez-vous, s'il vous plaît, clarifier votre réponse dans une modification à votre question initiale, où vous avez plus d'espace pour expliquer clairement? Merci =)
David dit de réintégrer Monica
7

Si vous souhaitez charger le fichier sans l'exécuter via le serveur Web, ce qui suit devrait fonctionner.

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

Cela chargera puis évaluera le contenu du fichier. Le fichier PHP devra être entièrement formé avec les balises <?phpet ?>pour evalpouvoir l'évaluer.

Jess
la source
J'aime cette méthode. Juste que mon fichier n'est pas complètement formé avec les balises <? Php et?> Pour eval pour l'évaluer. Est-ce qu'il y a un autre moyen?
ItsMeDom
Cela ne fonctionne pas si vous écrivez du code php dans ce fichier.php
Fernando Torres
4

Théoriquement, vous pouvez simplement utiliser fopen, puis stream_get_contents.

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

Cela devrait lire le fichier entier dans la chaîne $ pour vous, et ne devrait pas l'évaluer. Bien que je sois surpris que file_get_contents ne fonctionne pas lorsque vous avez spécifié le chemin local ...

Zeroshade
la source
3

Vous pouvez également démarrer la mise en mémoire tampon de la sortie, effectuer une inclusion / demande, puis arrêter la mise en mémoire tampon. Avec ob_get_contents (), vous pouvez simplement récupérer le contenu généré par cet autre fichier PHP dans une variable.

Alex Weinstein
la source
3

Si votre fichier a une déclaration de retour comme celle-ci:

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

Vous pouvez obtenir ceci dans une variable comme celle-ci:

$data = include $filePath;
António Almeida
la source
1
plus1 Merci, c'est ce que je cherchais
whitesiroi
1

file_get_contents () ne fonctionnera pas si votre serveur a désactivé allow_url_fopen . La plupart des hébergeurs Web partagés l'ont désactivé par défaut en raison de risques de sécurité. Aussi, en PHP6 , le allow_url_fopen option n'existera plus et toutes les fonctions agiront comme si elle était désactivée de manière permanente. C'est donc une très mauvaise méthode à utiliser.

La meilleure option à utiliser si vous accédez au fichier via http est cURL

marque
la source