Estoy intentando pasar una variable a un archivo de inclusión . Mi host cambió la versión de PHP y ahora cualquier solución que pruebe no funciona.
Creo que probé todas las opciones que pude encontrar. ¡Seguro que es lo más sencillo!
La variable debe establecerse y evaluarse desde el primer archivo que llama (en realidad $_SERVER['PHP_SELF']
, y debe devolver la ruta de ese archivo, no el incluido second.php
).
OPCION UNO
En el primer archivo:
global $variable;
$variable = "apple";
include('second.php');
En el segundo archivo:
echo $variable;
OPCION DOS
En el primer archivo:
function passvariable(){
$variable = "apple";
return $variable;
}
passvariable();
OPCION TRES
$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.
$variable = $_GET["var"]
echo $variable
Ninguno de estos funciona para mí. La versión de PHP es 5.2.16.
¿Qué me estoy perdiendo?
¡Gracias!
global
lo que no es necesario; su primera opción debería funcionar bien.Respuestas:
Puede utilizar la función extract ()
Drupal usa, en su función theme ().
Aquí hay una función de renderizado con un
$variables
argumento.function includeWithVariables($filePath, $variables = array(), $print = true) { $output = NULL; if(file_exists($filePath)){ // Extract the variables to a local namespace extract($variables); // Start output buffering ob_start(); // Include the template file include $filePath; // End buffering and return its contents $output = ob_get_clean(); } if ($print) { print $output; } return $output; }
./index.php:
includeWithVariables('header.php', array('title' => 'Header Title'));
./header.php:
<h1><?php echo $title; ?></h1>
fuente
array( 'title' => &$title )
el $ title se pueda cambiar dentro del archivo incluido .La opción 3 es imposible: obtendría la salida renderizada del archivo .php, exactamente como lo haría si ingresara esa URL en su navegador. Si en su lugar obtuviera código PHP sin procesar (como le gustaría), entonces TODO el código fuente de su sitio quedaría expuesto, lo cual generalmente no es algo bueno.
La opción 2 no tiene mucho sentido: estaría ocultando la variable en una función y estaría sujeto al alcance de la variable de PHP. También tendrías que tener
$var = passvariable()
lugar para llevar esa variable "interior" al "exterior", y punto de .La opción 1 es la más práctica.
include()
básicamente absorberá el archivo especificado y lo ejecutará allí mismo, como si el código en el archivo fuera literalmente parte de la página principal. Parece una variable global, que la mayoría de la gente desaprueba aquí, pero según la semántica de análisis de PHP, estas dos son idénticas:$x = 'foo'; include('bar.php');
y
$x = 'foo'; // contents of bar.php pasted here
fuente
Teniendo en cuenta que una declaración de inclusión en php en el nivel más básico toma el código de un archivo y lo pega en el lugar donde lo llamó y el hecho de que el manual de inclusión establece lo siguiente:
Estas cosas me hacen pensar que hay un problema diferente en conjunto. Además, la opción número 3 nunca funcionará porque no está redirigiendo a
second.php
que solo la está incluyendo y la opción número 2 es una solución extraña. El ejemplo más básico de la declaración de inclusión en php es:vars.php <?php $color = 'green'; $fruit = 'apple'; ?> test.php <?php echo "A $color $fruit"; // A include 'vars.php'; echo "A $color $fruit"; // A green apple ?>
Teniendo en cuenta que la opción número uno es la más cercana a este ejemplo (aunque más complicada de lo que debería ser) y no está funcionando, me hace pensar que cometió un error en la declaración de inclusión (la ruta incorrecta en relación con la raíz o similar problema).
fuente
En lo que respecta a la pregunta del OP, específicamente "La variable debe establecerse y evaluarse desde el primer archivo de llamada (en realidad es '$ _SERVER [' PHP_SELF ']', y debe devolver la ruta de ese archivo, no el segundo incluido. php) ".
Esto le dirá qué archivo incluyó el archivo. Coloque esto en el archivo incluido.
$includer = debug_backtrace(); echo $includer[0]['file'];
fuente
Tengo el mismo problema aquí, puede usar la matriz $ GLOBALS.
$GLOBALS["variable"] = "123"; include ("my.php");
También debería ejecutarse haciendo esto:
$myvar = "123"; include ("my.php"); .... echo $GLOBALS["myvar"];
Que tengas un buen día.
fuente
OPCIÓN 1 funcionó para mí, en PHP 7, y seguro que también funciona en PHP 5. Y la declaración de alcance global no es necesaria para el archivo incluido para el acceso a las variables, los archivos incluidos o "requeridos" son parte del script, solo asegúrese de hacer el "incluir" DESPUÉS de la declaración de la variable. ¿Quizás tiene alguna configuración incorrecta con las variables de alcance global en su PHP.ini?
Pruebe en el primer archivo:
<?php $myvariable="from first file"; include ("./mysecondfile.php"); // in same folder as first file LOLL ?>
mysecondfile.php
<?php echo "this is my variable ". $myvariable; ?>
Debería funcionar ... si no solo intenta reinstalar PHP.
fuente
Me encontré con este problema en el que tenía un archivo que establece variables basadas en los parámetros GET. Y ese archivo no se pudo actualizar porque funcionaba correctamente en otra parte de un gran sistema de administración de contenido. Sin embargo, quería ejecutar ese código a través de un archivo de inclusión sin que los parámetros estuvieran realmente en la cadena de URL. La solución simple es que puede configurar las variables GET en el primer archivo como lo haría con cualquier otra variable.
En vez de:
include "myfile.php?var=apple";
Podría ser:
$_GET['var'] = 'apple'; include "myfile.php";
fuente
Según php docs (ver $ _SERVER ) $ _SERVER ['PHP_SELF'] es el "nombre de archivo del script que se está ejecutando actualmente".
La instrucción INCLUDE "incluye y evalúa el archivo" especificado y "el código que contiene hereda el alcance de la variable de la línea en la que ocurre la inclusión" (consulte INCLUDE ).
Creo que $ _SERVER ['PHP_SELF'] devolverá el nombre de archivo del primer archivo, incluso cuando lo use el código en el 'second.php'.
Probé esto con el siguiente código y funciona como se esperaba ($ phpSelf es el nombre del primer archivo).
// In the first.php file // get the value of $_SERVER['PHP_SELF'] for the 1st file $phpSelf = $_SERVER['PHP_SELF']; // include the second file // This slurps in the contents of second.php include_once('second.php'); // execute $phpSelf = $_SERVER['PHP_SELF']; in the secod.php file // echo the value of $_SERVER['PHP_SELF'] of fist file echo $phpSelf; // This echos the name of the First.php file.
fuente
Puede ejecutar todo en "second.php" agregando variable con jQuery
<div id="first"></div> <script> $("#first").load("second.php?a=<?php echo $var?>") </scrpt>
fuente
Sé que esta es una pregunta antigua, pero me encontré con ella ahora y vi que nadie mencionó esto. así que escribiéndolo.
La opción uno, si se modifica así, también debería funcionar.
El original
RETOCAR
En el primer archivo:
$variable = "apple"; include('second.php');
En el segundo archivo:
global $variable; echo $variable;
fuente
Descubrí que el parámetro de inclusión debe ser la ruta completa del archivo, no una ruta relativa o una ruta parcial para que esto funcione.
fuente
include
's. Solo tienes que asegurarte de que estás asumiendo un comienzo correcto "relativo a qué".Esto funcionó para mí: para envolver el contenido del segundo archivo en una función, de la siguiente manera:
firstFile.php
<?php include("secondFile.php"); echoFunction("message");
secondFile.php
<?php function echoFunction($variable) { echo $variable; }
fuente
Hacer esto:
$checksum = "my value"; header("Location: recordupdated.php?checksum=$checksum");
fuente