Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/05/2011, 18h04   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Par défaut l'utilisation de require() en présence de Start_session

Bonjour à tous,
J'ai utilisé require pour exécuter un fichier php externe. Les deux fichiers contiennent des start_session().
fichier appelant = main.php
fichier appelé = famille1.php(contient des var globaux par exp: global $nbr; global $req; )
Lors de l'exécution, 2 types d'erreurs m'apparaissent:
Citation:
*A session had already been started - ignoring session_start() in C:\Program Files\EasyPHP-5.3.3.1\www\famille11.php on line x

*Undefined variable: req in C:\Program Files\EasyPHP-5.3.3.1\www\famille1.php on line xx

Undefined variable: nbr in C:\Program Files\EasyPHP-5.3.3.1\www\famille1.php on line 264
Sachant que c'est affiché tout les var globaux
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 20h44   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Vérifie l'existence d'une session avant de la démarrer :
Code :
1
2
3
4
if(!isset($_SESSION))
{
session_start();
}
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/05/2011, 01h58   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Bonsoir,
J'ai essayé cette condition dans les 2 fichiers, ça fonctionne mais ça ne me permet pas de résoudre le problème des variables globaux qui ne les connait pas telque :
Citation:
Undefined variable: req in C:\Program Files\EasyPHP-5.3.3.1\www\famille1.php on line xx
Alors une idée svp!!
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 09h35   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Pourquoi as-tu besoin de variables globales ? L'erreur apparait au niveau de la définition global ou ailleurs ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 11h18   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Citation:
Envoyé par sabotage Voir le message
Pourquoi as-tu besoin de variables globales ?
je les ai utilisé dans plusieurs fonctions du programme
Citation:
Envoyé par sabotage Voir le message
L'erreur apparait au niveau de la définition global ou ailleurs ?
L'erreur apparaît lors que "main.php" appelle "famille1.php". Il n'a pas pu connaitre les var globaux.
J'ai pas pu identifier le source de ces erreurs!
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 12h56   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Il y a t-il une solution d’éviter l'utilisation de global en tenant compte que je n'utilise pas l'orienté objet!
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 18h49   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Par défaut appeler une variable d'une fonction dans une autrefonction

Bonjour,
J'ai utilisé une fonction(ne contient pas de return):function parser($deep), qui permet de déterminer les variables "$nbr" et "$var". Je les déclaré comme des var globaux:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function parser($deep)
{global $req;
global $nbr;
for($i=0;$i<=$nb;$i++)
 {switch($i)
      {	case 0 :
	{list($date, $heure) = explode(" ", $att[$i]);
	 echo "<br> $date <br>";
	 echo $heure;
	 break;
	}	
	case 3 :
	{ $id = explode("-", $att[$i]);
	   $nbi = count($id)-1;
	   for($ii=0; $ii<=$nbi; $ii++)
	    { if($ii==2)
 	{$req = explode(":", $id[$ii]);	
          $nbr = count($req)-1;}
	 break;
	}//fin case
	}//fin switch
 }//fin for
}//fin fonction

Je souhaite les utiliser dans une autre fonction:
function det_protocole($req,$nbr)
{global $protocole;	echo"******|$nbr|******";//aucune valeur affiché lors se l'exe
 for($i=0; $i<=$nbr; $i++)
 {if(stristr($req[$i],'udp')==TRUE)
	{$protocole='UDP';
	 echo "<br>Le protocole = $protocole";
	}
 }//fin for
}//fin fonction
Est ce que personne sait où le problème réside, en tenant compte que la faute apparaît quand j'appelle "det_protocole($req,$nbr);".
Undefined variable: req in C:\Program Files (x86)\EasyPHP-5.3.3.1\www\main_total.php on line xx
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 20h05   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
A quel endroit fais-tu l'appel ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 01h07   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Re,
L'appel se fait dans une fonction, plus précisément dans une boucle:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function det_famille($ligne,$nb)
{$famille='';
for($i=0; $i<=$nb; $i++)
 {global $deep;
  if ((stristr($ligne[$i],'built')) && (stristr($ligne[$i],'tcp connection')) ==TRUE) 
	{$famille='F1';
	 echo "<br><b>FAMILLE = $famille</b>";
	$deep=$ligne[$i];
	 parser($deep);//fonction parser
	det_protocole();//fonction protocole
}
}
}
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 05h25   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Dans la déclaration de det_protocole() il y a des paramètres et la tu l'appelles sans.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 16h22   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Re,
Merci pour votre suivie "SABOTAGE"!
Alors, j'ai corrigé l'appel de fonction(avec paramètres)..mais toujours le même problème!!
J'ai essayé à mon tour de trouver une autre solution..ça fonctionne mais je ne suis pas trop convaincu! J'ai appelé les deux var $req et $nbr juste avant l'appel de fonction...pourtant qu'ils sont déclarés global!!
La sol est la suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function det_famille($ligne,$nb)
{$famille='';
for($i=0; $i<=$nb; $i++)
 {global $deep;
  if((stristr($ligne[$i],'built')) && (stristr($ligne[$i],'tcp connection')) ==TRUE) 
	{$famille='F1';
	 echo "<br><b>FAMILLE = $famille</b>";
	$deep=$ligne[$i];
	parser($deep);
	global $req;
	global $nbr;
	det_protocole($nbr,$req);//function det_protocole($nbr,$req)
	} }}
Ma question est:Il y a t_il un appel par référence en PHP??et trouvez vous ma solution logique..car moi NON?!
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 18h37   #12
Membre régulier
 
Inscription : juillet 2007
Messages : 62
Détails du profil
Informations personnelles :
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juillet 2007
Messages : 62
Points : 82
Points : 82
Pas très clair cette histoire.
Citation:
fichier appelant = main.php
fichier appelé = famille1.php(contient des var globaux par exp: global $nbr; global $req; )
Et l'erreur dans :
Citation:
Undefined variable: req in C:\Program Files (x86)\EasyPHP-5.3.3.1\www\main_total.php on line xx
D'où il sort le main_total.php ?

Si tu déclares tes variables globales $nbr et $reg dans la fonctions parser() elle serons accessibles sur la page uniquement après l'appel à cette fonctions sinon elles n'existent pas
kodeya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 07h06   #13
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 37
Points : 14
Points : 14
Bonjour,
"Si tu déclares tes variables globales $nbr et $reg dans la fonctions parser() elle serons accessibles sur la page uniquement après l'appel à cette fonctions sinon elles n'existent pas"
comment dois je faire cette déclaration en main_total.php?
Juste avant require/include?
hajer.d est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h16.


 
 
 
 
Partenaires

Hébergement Web