2011-08-01 32 views
8

Deseo poder enviar algunas variables a un archivo a través de file_get_contents().Variables de envío de PHP a file_get_contents()

Ésta es firstfile.php:

<?php 
$myvar = 'This is a variable'; 
// need to send $myvar into secondfile.php 
$mystr = file_get_contents('secondfile.php'); 
?> 

Ésta es secondfile.php:

The value of myvar is: <?php echo $myvar; ?> 

Quiero la variable $mystr para igualar 'The value of myvar is: This is a variable'

¿Hay alguna otra función que le permitirá haces esto en PHP?

+0

posible duplicado de [¿Cuál sería la mejor manera de cargar (con variables) varios archivos contenidos en una cadena?] (http://stackoverflow.com/questions/6905364/what-would-be-the-best-way-to-load-with-variables-multiple-files-content-into-a) – Phil

Respuesta

15
ob_start(); 
include 'secondfile.php'; 
$myvar = ob_get_clean(); 

Ser informado de que: a muchos ob_start 's en su código son generalmente un signo debe definir funciones que devuelven cadenas, que luego se puede elegir hacer eco o no.

+0

+1 Buen punto sobre eco. – Nicole

15

Hay una gran diferencia entre obtener el contenido de un archivo y ejecución de un script :

  • include — esta directiva PHP se ejecuta el archivo especificado como un script , y el alcance es el mismo que el alcance donde se realiza la llamada include. Por lo tanto, para "pasarle" variables, simplemente necesita definirlas antes de llamar al include. include solo se puede usar localmente (solo puede incluir archivos en el mismo sistema de archivos que el servidor PHP).

  • file_get_contents — Al conseguir un archivo localmente, esto simplemente recupera el texto que se encuentra en el archivo. No se realiza procesamiento de PHP, por lo que no hay forma de "pasar" las variables. Si inspecciona $myvar en su ejemplo anterior, verá que contiene la cadena exacta "<?php echo $myvar; ?>" — que no se ha ejecutado.

    Sin embargo, PHP ha confundido algunas cosas al permitir que file_get_contents extraiga el contenido de un archivo "remoto" — una dirección de Internet. En este caso, el concepto es el mismo — PHP simplemente extrae el resultado bruto de lo que está contenido en esa dirección — pero PHP, Java, Ruby o cualquier otra cosa que se ejecute en ese servidor remoto servidor puede haber ejecutado algo para producir ese resultado.

    En ese caso, puede "pasar" variables en la URL (referido como GET parámetros de la petición) de acuerdo con las especificaciones de la URL (si se trata de una API, o algo similar). No hay forma de pasar variables de su elección que no se hayan especificado para ser manejadas en la secuencia de comandos que será procesada por ese servidor remoto.

    Nota: El "servidor remoto" se refiere MAYO ser su propio servidor, aunque hay que tener cuidado, ya que puede confundir las cosas aún más si no se sabe muy bien cómo funciona todo (que se convierte en un segundo, solicitud completamente separada). Normalmente no hay una buena razón para hacer esto en lugar de utilizar include, a pesar de que pueden lograr similares resultados.

+0

Buena explicación para el OP, no tenía la energía para hacer eso, +1. – Wrikken

+0

Perfecto, ¡gracias! :) – Mike

1

El siguiente fragmento de código muestra una forma sencilla cómo enviar una solicitud POST HTTP usando la función file_get_contents PHP:

<?php 

$url = 'http://url.com/path'; 
$data = array('param1' => 'value1', 'param2' => 'value2') 

// use key 'http' even if you send the request to https://... 
$options = array('http' => array(
    'method' => 'POST', 
    'content' => http_build_query($data) 
)); 

$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

print_r($result); 

O Passing variable in a URL (php) & file_get_contents()

0

Es posible utilizar la función sprintf, por ejemplo, : firstfile.txt

The value of my var is: %s 

s econdfile.php

<?php 
$f = file_get_contents("firstfile.txt"); 
$var = "some"; 
echo sprintf($f, $var); 

resultado será

El valor de mi var es: algunos

Cuestiones relacionadas