2010-12-04 36 views
3

J'ai essayé de trouver une solution pour celui-ci:PHP ne peut pas passer variable fichier inclus

file1.php

$name = "Jacob"; 
include ("file2.php"); 

file2.php

Hi there! <?php echo $name ?> 

Sortie

Hi There! Notice: Undefined variable: name in /volume1/web/test/file2.php on line 9 

Besoin d'aide s'il vous plaît: //

+0

Juste essayé cela et il fonctionne comme il se doit. Vous pourriez essayer de faire de $ name une variable globale, mais cela entraîne d'autres problèmes. – Roadmaster

+0

Cela fonctionne bien; En effet, c'est le nombre de systèmes de templates PHP qui fonctionnent. –

Répondre

4

Assurez-vous que votre URL se termine dans file1.php et non file2.php ou un autre fichier qui comprend file2.php. En outre, essayez de réduire les deux fichiers à exactement ce que vous avez posté ici (plus un <?php au début de file1.php) pour exclure le code environnant.

9

Votre code fonctionne correctement.

Si vous obtenez cette erreur, votre fichier1.php ne définit certainement pas $ name dans la portée globale.

Fyi, cité des docs:

Lorsqu'un fichier est inclus, le code qu'elle contient hérite de la portée des variables de la ligne où l'inclusion se produit. Toutes les variables disponibles à cette ligne dans le fichier appelant sera disponible dans le fichier appelé, de qui pointe vers l'avant. Cependant, toutes les fonctions et classes définies dans le fichier inclus ont la portée globale.

Mon testcase avec php-5.3.3-pl1-gentoo (cli) dans le cas où il est un bug PHP quelle que soit la version que vous utilisez - mais je doute que:

[[email protected]:~]> cat inc1.php 
<?php 
$name = 'bleh'; 
include('inc2.php'); 
?> 
[[email protected]:~]> cat inc2.php 
Hi there! <?php echo $name; ?> 
[[email protected]:~]> php inc1.php 
Hi there! bleh 
1

je suis parfois cuzzled (abréviation de confuzzled) et oubliez d'utiliser le fichier de base pour vérifier un projet en ligne. Par exemple, si vous utilisez un fichier de base appelé index.php avec include include.php, assurez-vous de lancer index.php et non le fichier include.

Le fichier inc.php affiche des erreurs dans un navigateur car il n'est pas lié aux variables index.php, tandis que le fichier index.php contient à la fois les variables et les includes.

0

Essayez d'utiliser ce code

global $name;  
$name = "Jacob";  
include ("file2.php"); 

** et à l'intérieur fichier2.php

global $name; 
echo "Hi there! ".$name; 

Je pense que cela va travailler

+0

Ce n'est pas comme ça que 'global' fonctionne, et à moins que l'écho dans file2 ne soit dans une fonction, le' $ name' est déjà dans la portée. – JJJ

+0

Désolé dans php v5.3 le problème est différent il y a un problème en passant des variables au fichier inclus .. essayez-le dans cette version .. nous verrons ce que je voulais dire – Montaser

2

J'ai eu le même problème et fixé comme ceci:

$name = "Jacob"; 
include ("file2.php"); 

file2.php

$name = $name; //add this line 
Hi there! <?php echo $name ?> 

je peux » t expliquer pourquoi cela devrait fonctionner comme ça. Juste cela a fonctionné.

0

J'utilise plutôt une variable d'environnement. Il contourne ce problème.

I.e.

$_ENV["name"] = "Jacob";

et à l'intérieur file2.php

echo $_ENV["name"];

0

Si vous souhaitez imprimer/utiliser la variable puis $name, vous devez d'abord déclarer cette variable dans file2 comme comme $name="", alors vous pouvez facilement utiliser il, sans déclarer, vous obtiendrez erreur de Undefined Variable.