2009-05-12 9 views
12

Je veux obtenir le contenu d'un fichier .php dans une variable sur une autre page. J'ai deux fichiers, myfile1.php et myfile2.php.Comment exécuter et obtenir le contenu d'un fichier .php dans une variable?

myfile2.php

<?PHP 
    $myvar="prashant"; // 
    echo $myvar; 
?> 

Maintenant, je veux obtenir la valeur fait écho par la myfile2.php dans une variable myfile1.php, j'ai essayé la voie follwing, mais sa prise de tout le contenu y compris tag php() aussi.

<?PHP 
    $root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true); 
?> 

Dites-moi comment je peux obtenir le contenu retourné par un fichier PHP dans une variable définie dans un autre fichier PHP.

Merci

+0

La réponse non acceptée ci-dessous est le meilleur: http://stackoverflow.com/a/851773/632951 – Pacerier

+0

** TOUJOURS PRUDENT **, parce que si vous utilisez 'ob_get_contents()', alors vous devrez peut-être faire 'ob_end_flush', autrement vous pourriez avoir des problèmes, si vous utilisez, vous utiliserez une commande php' header' après cela. –

Répondre

1

Vous pouvez utiliser la directive include pour ce faire.

Fichier 2:

<?php 
    $myvar="prashant"; 
?> 

Fichier 1:

<?php 

include('myfile2.php'); 
echo $myvar; 

?> 
+0

Je connais déjà cette méthode et fonctionne bien, mais n'y a-t-il pas d'autre moyen que celui-ci? – Prashant

+0

@Prashant Et quel est votre problème avec cette méthode? Il est en retrait pour ce faire. –

+0

En fait, je regardais juste s'il y a une méthode de type "retour" qui peut directement me donner la valeur. Quoi qu'il en soit, j'ai adopté la réponse @ zombat comme méthode suggérée par @harto peut avoir quelques problèmes de performance, et je ne peux pas compromettre avec la performance. Merci guyz. – Prashant

17

Si vous ne voulez que le contenu echo() « ées par la page inclus, vous pouvez envisager d'utiliser en mémoire tampon de sortie:

ob_start(); 
include 'myfile2.php'; 
$echoed_content = ob_get_clean(); // gets content, discards buffer 

Voir http://php.net/ob_start

+0

ob_start() est nouveau pour moi. Alors, @harto pouvez-vous me suggérer quelle méthode fera mieux en fonction des performances, de votre méthode ou de la méthode @zombat suggérée? – Prashant

+1

La mise en mémoire tampon de sortie ajoute un petit succès de performance, car il y a un surcoût dans l'initialisation et la maintenance des tampons. – zombat

+1

@Prashant: Je n'ai pas de données disponibles, mais je suppose que l'impact sur les performances serait négligeable.Vous pouvez essayer les deux méthodes et voir s'il y a une différence mesurable entre les deux, mais je pense que ce serait vraiment très petit. – harto

4

"En fait, je cherchais simplement à savoir s'il existe une méthode de type retour qui peut me donner directement la valeur" - Vous venez de répondre à votre propre question.

Voir http://sg.php.net/manual/en/function.include.php, Exemple # 5

file1.php:

<? return 'somevalue'; ?> 

file2.php:

<? 

$file1 = include 'file1.php'; 
echo $file1; // This outputs 'somevalue'. 

?> 
+1

Ah! Je n'étais pas au courant de cela. – harto

+0

Cela mérite plus de vues! – GlabbichRulz

30

Vous devez différencier deux choses:

  • Do vous voulez capturer le ou tput (echo, print, ...) du fichier inclus et utilise la sortie dans une variable (chaîne)? Voulez-vous renvoyer certaines valeurs à partir des fichiers inclus et les utiliser comme variable dans votre script hôte?

variables locales dans vos fichiers inclus seront déplacés toujours à la portée actuelle de votre hôte Script - ceci doit être noté.Vous pouvez combiner toutes ces fonctions en un seul:

include.php

$hello = "Hello"; 
echo "Hello World"; 
return "World"; 

host.php

ob_start(); 
$return = include 'include.php'; // (string)"World" 
$output = ob_get_clean(); // (string)"Hello World" 
// $hello has been moved to the current scope 
echo $hello . ' ' . $return; // echos "Hello World" 

Le return • Figuration est très pratique en particulier lors de l'utilisation des fichiers de configuration.

config.php

return array(
    'host' => 'localhost', 
    .... 
); 

app.php

$config = include 'config.php'; // $config is an array 

EDIT

Pour répondre à votre question au sujet de la peine de performances lors de l'utilisation des tampons de sortie, je viens de faire quelques tests rapides. 1.000.000 itérations de ob_start() et le $o = ob_get_clean() correspondant prennent environ 7,5 secondes sur ma machine Windows (sans doute pas le meilleur environnement pour PHP). Je dirais que l'impact de la performance devrait être considérée comme assez faible ...

0

Si vous souhaitez obtenir toute l'utilisation du site par

<?php 
$URL = 'http://www.example.com/'; 
$homepage = file_get_contents($URL); 
echo $homepage; 
?> 
0

S'il vous plaît essayer ce code

myfile1.php

<?php 
    echo file_get_contents("http://domainname/myfile2.php"); 
?> 

myfile2.php

<?PHP 
    $myvar="prashant"; 
    echo $myvar; 
?> 
7

J'essaie toujours d'éviter ob_ fonctions. Au lieu de cela, je l'utilise:

<?php 
$file = file_get_contents('/path/to/file.php'); 
$content = eval("?>$file"); 
echo $content; 
?> 
+1

Votre réponse est intéressante. Pouvez-vous s'il vous plaît partager cela pourquoi vous évitez la mise en mémoire tampon de sortie, et utilisez eval() à la place? Votre réponse sera une bonne connaissance pour moi. –

+0

Merci pour l'astuce 'eval ("?> $ File ")'. C'est vraiment utile. – Tobia

+0

Les fonctions OB_ modifient le tampon de sortie, et les nombreux autres codes de CMS pourraient utiliser des fonctions tampon à ce moment-là, et entrer en conflit, ou nettoyer le tampon, ou le modifier ... Donc, je ne le touche jamais. –

2

Vous pouvez utiliser des tampons de sortie, qui permet de stocker tout ce que vous sortie, et ne l'imprimer à moins que vous dire explicitement, ou ne finissent pas/effacer les tampons d'ici la fin de chemin d'exécution.

// Create an output buffer which will take in everything written to 
// stdout(i.e. everything you `echo`ed or `print`ed) 
ob_start() 
// Go to the file 
require_once 'file.php'; 
// Get what was in the file 
$output = ob_get_clean();