2009-05-12 7 views
12

Quiero obtener el contenido de un archivo .php en una variable en otra página.¿Cómo ejecutar y obtener el contenido de un archivo .php en una variable?

Tengo dos archivos, myfile1.php y myfile2.php.

myfile2.php

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

Ahora quiero conseguir el valor repetido por el myfile2.php en una variable en myfile1.php, he tratado de la manera follwing, pero su tomando todos los contenidos incluyendo la etiqueta php() también.

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

Por favor, dígame cómo puedo obtener el contenido que devuelve un archivo PHP en una variable definida en otro archivo PHP.

Gracias

+0

La respuesta no aceptado a continuación es el mejor uno: http://stackoverflow.com/a/851773/632951 – Pacerier

+0

** ** SIEMPRE tenga cuidado, porque si va a utilizar 'ob_get_contents()', entonces es posible que tengas que hacer 'ob_end_flush'; de lo contrario, puede que tengas problemas, si lo usas utilizarás cualquier comando php' header' después de eso. –

Respuesta

1

Usted puede usar la directiva include para hacer esto.

Archivo 2:

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

Archivo 1:

<?php 

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

?> 
+0

Ya conozco este método y está funcionando bien, pero ¿hay otra manera que esto? – Prashant

+0

@Prashant ¿Y cuál es su problema con este método? Está sangrado por hacer esto. –

+0

En realidad solo estaba buscando que haya algún método tipo "retorno" que pueda darme el valor directamente. De todos modos, adopté la respuesta de @Zombat como el método sugerido por @harto puede tener algunos problemas de rendimiento, y no puedo comprometer el rendimiento. Gracias, Guyz. – Prashant

17

si sólo quería el contenido echo() 'ed por la página incluida, se puede considerar el uso de búferes de salida:

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

Ver http://php.net/ob_start

+0

ob_start() es nuevo para mí. Entonces, ¿me puede sugerir qué método funcionará mejor según el rendimiento, su método o el método sugerido por @zombat? – Prashant

+1

El almacenamiento en búfer de salida agrega un pequeño golpe de rendimiento, ya que hay gastos generales al inicializar y mantener los búferes. – zombat

+1

@Prashant: No tengo ningún dato disponible, pero supongo que el impacto en el rendimiento sería insignificante.Podrías probar ambos métodos y ver si hay una diferencia mensurable entre los dos, pero creo que sería muy pequeño en verdad. – harto

4

"De hecho, solo estaba buscando que haya algún método de devolución que me pueda dar el valor directamente" - Acabas de responder a tu propia pregunta.

Ver http://sg.php.net/manual/en/function.include.php, Ejemplo # 5

file1.php:

<? return 'somevalue'; ?> 

file2.php:

<? 

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

?> 
+1

¡Ah! No estaba enterado de esto. – harto

+0

¡Esto merece más vistas! – GlabbichRulz

30

Hay que diferenciar dos cosas:

  • Do quieres capturar el ou tput (echo, print, ...) del archivo incluido y utiliza la salida en una variable (cadena)?
  • ¿Desea devolver ciertos valores de los archivos incluidos y utilizarlos como una variable en su secuencia de comandos host ?

Las variables locales en sus archivos incluidos siempre se trasladaron al ámbito actual de su anfitrión guión - esto debe tenerse en cuenta.Se pueden combinar todas estas características en una sola:

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" 

El -feature return es muy útil especialmente cuando se utilizan archivos de configuración.

config.php

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

app.php

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

EDITAR

Para responder a su pregunta acerca de la penalización de rendimiento cuando se utilizan los buffers de salida, que acabo de hacer algunas pruebas rápida. 1,000,000 iteraciones de ob_start() y el correspondiente $o = ob_get_clean() tardan unos 7,5 segundos en mi máquina con Windows (podría decirse que no es el mejor entorno para PHP). Yo diría que el impacto en el rendimiento se debe considerar bastante pequeño ...

0

Si desea obtener todo el uso del sitio por

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

Por favor, intente este código

myfile1.php

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

myfile2.php

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

Siempre trato de evitar ob_ funciones. En su lugar, yo uso:

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

Tu respuesta es interesante. ¿Puedes compartir por qué evitas el almacenamiento en búfer de salida y usas eval() en su lugar? Tu respuesta será un buen conocimiento para mí. –

+0

Gracias por el truco 'eval ("?> $ File ")'. Eso es realmente útil. – Tobia

+0

Las funciones OB_ modifican el búfer de salida, y los muchos otros códigos en CMS podrían usar funciones de búfer de manera independiente en ese momento, y puede entrar en conflicto, o limpiar el búfer, o modificarlo ... Por lo tanto, nunca lo toco. –

2

Usted puede utilizar buffers de salida, lo que almacenar todo lo que de salida, y no voy a imprimirlo a menos que explícitamente se lo pida o no terminen/borrar las memorias intermedias a finales de camino de ejecución.

// 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(); 
Cuestiones relacionadas