89 votes

PHP pass variable à inclure

J'essaie de faire passer une variable dans un fichier inclure fichier. Mon hôte a changé la version de PHP et maintenant, quelle que soit la solution que j'essaie, elle ne fonctionne pas.

Je pense que j'ai essayé toutes les options que j'ai pu trouver. Je suis sûr que c'est la chose la plus simple !

La variable doit être définie et évaluée à partir du premier fichier appelant (il s'agit en fait de $_SERVER['PHP_SELF'] et doit retourner le chemin d'accès de ce fichier, et non le fichier inclus. second.php ).

OPTION UN

Dans le premier fichier :

global $variable;
$variable = "apple";
include('second.php');

Dans le deuxième fichier :

echo $variable;

OPTION DEUX

Dans le premier fichier :

function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();

TROISIÈME OPTION

$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.

$variable = $_GET["var"]
echo $variable

Aucun d'entre eux ne fonctionne pour moi. La version de PHP est 5.2.16.

Qu'est-ce que je rate ?

Merci !

58voto

thi3rry Points 9

Vous pouvez utiliser le fonction extract()
Drupal l'utilise, dans sa fonction theme().

Ici, il s'agit d'une fonction de rendu avec un $variables argument.

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>

50voto

Marc B Points 195501

L'option 3 est impossible - vous obtiendriez la sortie rendue du fichier .php, exactement comme vous le feriez si vous tapiez cette url dans votre navigateur. Si vous obtenez le code PHP brut à la place (comme vous le souhaitez), alors TOUT le code source de votre site serait exposé, ce qui n'est généralement pas une bonne chose.

L'option 2 n'a pas beaucoup de sens - vous cacheriez la variable dans une fonction, et seriez soumis à la portée des variables de PHP. Vous devriez également avoir $var = passvariable() quelque part pour faire passer cette variable "intérieure" à la variable "extérieure", et vous êtes de retour à la case départ.

L'option 1 est la plus pratique. include() va aspirer le fichier spécifié et l'exécuter sur place, comme si le code du fichier faisait littéralement partie de la page parent. Cela ressemble à une variable globale, ce que la plupart des gens désapprouvent ici, mais selon la sémantique d'analyse de PHP, les deux sont identiques :

$x = 'foo';
include('bar.php');

et

$x = 'foo';
// contents of bar.php pasted here

12voto

Florin Stingaciu Points 7365

Considérant qu'une déclaration d'inclusion en php au niveau le plus basique prend le code d'un fichier et le colle à l'endroit où vous l'avez appelé et le fait que le manuel sur l'inclusion déclare ce qui suit :

Lorsqu'un fichier est inclus, le code qu'il contient hérite de la portée des variables de la ligne sur laquelle l'inclusion a lieu. Toutes les variables disponibles à cette ligne dans le fichier appelant seront disponibles dans le fichier appelé, à partir de ce point.

Ces éléments me font penser qu'il y a un autre problème. De plus, l'option numéro 3 ne fonctionnera jamais car vous ne redirigez pas vers second.php vous l'incluez juste et l'option numéro 2 est juste un contournement bizarre. L'exemple le plus simple de la déclaration d'inclusion en php est le suivant :

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

?>

Étant donné que l'option numéro un est la plus proche de cet exemple (même si elle est plus compliquée qu'elle ne devrait l'être) et qu'elle ne fonctionne pas, cela me fait penser que vous avez fait une erreur dans l'instruction include (le mauvais chemin relatif à la racine ou un problème similaire).

7voto

Daniel Points 651

J'ai le même problème ici, vous pouvez utiliser le tableau $GLOBALS.

$GLOBALS["variable"] = "123";
include ("my.php");

Il devrait aussi fonctionner en faisant ça :

$myvar = "123";
include ("my.php");

....

echo $GLOBALS["myvar"];

Passez une bonne journée.

6voto

DrOne Points 61

OPTION 1 a fonctionné pour moi, en PHP 7, et je suis sûr que cela fonctionne aussi en PHP 5. Et la déclaration de la portée globale n'est pas nécessaire pour le fichier inclus pour l'accès aux variables, les fichiers inclus - ou "requis" - font partie du script, assurez-vous seulement que vous faites le "include" APRÈS la déclaration de la variable. Peut-être avez-vous une mauvaise configuration de la portée globale des variables dans votre PHP.ini ?

Essayez dans le premier fichier :

  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>

monsecondfile.php

  <?php 
  echo "this is my variable ". $myvariable;
  ?>

Cela devrait fonctionner... si ce n'est pas le cas, essayez de réinstaller PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X