IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] PB d'include : "can't redefine function .."


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut [Système] PB d'include : "can't redefine function .."
    Bonjour à tous,

    Voilà le soucis, le script ci-dessous doit lister le contenu d'un répertoire et de ses sous-répertoire.
    Or comme vous le savez, dans un soucis de portabilité, je dois savoir sur quel OS je me situe d'ou l'utilisation d'un include ... mais voilà l'include ne fonctionne pas et me renvoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Cannot redeclare os() (previously declared in d:\program files\easyphp1-8\www\scripts\quelSysteme.php:2) in d:\program files\easyphp1-8\www\scripts\quelSysteme.php on line 2
    Voici les sources (remarquez qu'elles sont bien commentée )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
     
         function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)     {
    	 // compatibilité Windows, Linux, BSD etc.
    	 $sys = include 'quelSysteme.php';
    	 if (ereg("Win(.*)",$sys,$occurs[])==true){
    	       $SEPARATOR="\\";
    	 }
    	 else {$SEPARATOR="/";}
     
    	 // récupère l'extension
         $extention=str_replace(".","\.",$extentionRecherchee);
     
         if(!$tableauDeFichier){$tableauDeFichier[0]='';}
         // boucle principale
    	 if(is_dir($LienRepertoir)){
         	$ClassDir= dir($LienRepertoir);
         		while(($nomFichier=$ClassDir->read())!=false){
         			// si répertoire courant ou répertoire parent, on continue
    				if($nomFichier=='.'||$nomFichier=='..'){
    	     			continue;
         			}
    				// s'il s'agit d'un répertoire, on fait un appel récursif
         			elseif(is_dir($LienRepertoir.$SEPARATOR.$nomFichier)){
    	          $tableauDeFichier= ParcourirDossier($LienRepertoir.$SEPARATOR.$nomFichier,			$extentionRecherchee,$tableauDeFichier);
         			}
    				// s'il s'agit d'un fichier contenant l'extension recherchée on le met dans la pile
         			elseif(ereg(".$extention$",$nomFichier)){
    		     		If($tableauDeFichier[0]==''){
    			     		$tableauDeFichier[0]=$LienRepertoir.$SEPARATOR.$nomFichier;
         		 		}
         				else{array_push($tableauDeFichier,$LienRepertoir.$SEPARATOR.$nomFichier);}
         			}
         		}
         	return $tableauDeFichier;
         }
    	 // si le répertoire spécifié n'en est pas un on retourne une erreur
         else
         { echo "Erreur"; return false;}
       }
    ET LE FICHIER INCLU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
     
    <?php
         function OS($Agent=false)
         {
         if(!$Agent) $Agent = $_SERVER['HTTP_USER_AGENT'];
         $os = null;
         $OS_arr = Array('Windows NT 6.0' => 'Windows Vista',
         'Windows NT 5.2' => 'Windows Server 2003',
         'Windows NT 5.1' => 'Windows XP',
         'Windows NT 5.0' => 'Windows 2000',
         'Win 9x 4.90' => 'Windows Me.',
         'Windows 98' => 'Windows 98',
         'Win98' => 'Windows 98',
         'Win95' => 'Windows 95',
         'Mac' => 'Macintosh',
         'PPC' => 'Macintosh',
         'Linux' => 'Linux',
         'FreeBSD' => 'FreeBSD',
         'Unix' => 'Unix',
         'SunOS' => 'SunOS',
         'IRIX' => 'IRIS',
         'BeOS' => 'BeOS',
         'OS/2' => 'OS/2',
         'AIX' => 'AIX');
         foreach($OS_arr as $key_OS => $value_OS)
         {
         if(eregi($key_OS, $Agent))
         {
         $os = $value_OS;
         }
         }
         if(empty($os)) return 'Inconnu';
         else return $os;
         }
     
         # Exemple d'utilisation :
         echo OS($_SERVER['HTTP_USER_AGENT']);
    ?>
    Merci d'avance les mecs !

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    tu dois surement inclure deux fois ton fichier qui contient la fonction OS().
    Remplace tes include par des include_once() et le probleme devrait rentrer dans l'ordre

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    Effectivement, ça enlève le problème de la soit-disant double déclaration (que je n'ai toujours pas compris car il fait référence à la même ligne de code, la première ci-dessous) mais le hic, c'est qu'il ne passe pas dans ma conditionnelle if(ereg("Win(.*)",$sys,$occurs[])==true)
    Du coup je fait un p'tit coup d'echo et là $sys vaut :
    1111111111111111111111111111111111111111111111

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sys = include_once 'C:\dev\scripts\OS.php';
     
             echo $sys;
    	 if (ereg("Win(.*)",$sys,$occurs[])==true){
     
    	       $SEPARATOR="\\";
    	 }
             else {$SEPARATOR="/";}
    voici le code pour tester la version du système (il fonctionne, j'ai testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
     
    <?php
         function OS($Agent=false)
         {
         if(!$Agent) $Agent = $_SERVER['HTTP_USER_AGENT'];
         $os = null;
         $OS_arr = Array('Windows NT 6.0' => 'Windows Vista',
         'Windows NT 5.2' => 'Windows Server 2003',
         'Windows NT 5.1' => 'Windows XP',
         'Windows NT 5.0' => 'Windows 2000',
         'Win 9x 4.90' => 'Windows Me.',
         'Windows 98' => 'Windows 98',
         'Win98' => 'Windows 98',
         'Win95' => 'Windows 95',
         'Mac' => 'Macintosh',
         'PPC' => 'Macintosh',
         'Linux' => 'Linux',
         'FreeBSD' => 'FreeBSD',
         'Unix' => 'Unix',
         'SunOS' => 'SunOS',
         'IRIX' => 'IRIS',
         'BeOS' => 'BeOS',
         'OS/2' => 'OS/2',
         'AIX' => 'AIX');
         foreach($OS_arr as $key_OS => $value_OS)
         {
         if(eregi($key_OS, $Agent))
         {
         $os = $value_OS;
         }
         }
         if(empty($os)) return 'Inconnu';
         else return $os;
         }
     
         # Exemple d'utilisation :
         echo OS($_SERVER['HTTP_USER_AGENT']);
         ?>
    Merci à toi en tout cas ça fait plaisir d'avoir un peu d'aide

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    ok j'ai compris mon erreur mais j'en ai une autre !

    En fait j'ai mis mon "include dans une fonction récursive

    => solution : sortir les variables de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $sys = include 'C:\dev\scripts\OS.php';
    	 echo $sys;
    	 if (ereg("Win(.*)",$sys,$occurs[])==true){
    	 	   echo $sys;
    	       $SEPARATOR="\\";
    	 }
    	 else {$SEPARATOR="/";}
     
     
         function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)     { ...}
    Et là il me dit UNDEFINED_VARIABLE. J'ai essayé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
             global $sys;
    	 global $SEPARATOR;
     
    	 $sys = include 'C:\dev\scripts\OS.php';
    	 echo $sys;
    	 if (ereg("Win(.*)",$sys,$occurs[])==true){
    	 	   echo $sys;
    	       $SEPARATOR="\\";
    	 }
    	 else {$SEPARATOR="/";}
     
     
         function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)     {...}
    mais ça veut pas marcher non plus (j'ai pas de doc assez complète sur ce point précis bizarrement)

  5. #5
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    c'est dans la fonction qu'il faut utiliser le mot clé global. En gros ton global ca veut pas dire "les variables SERONT globales" ca veut dire "attention cette variable si tu ne la connais pas c'est normale, elle est définie ailleurs".

    Donc déplaces tes deux global... juste au début de ta fonction et ça devrait mieux marcher.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    Merci chef !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Problème lenteur include
    Par carmelaurel dans le forum Langage
    Réponses: 5
    Dernier message: 25/04/2007, 09h59
  2. [Système] [debutant] Fonction include
    Par pierre50 dans le forum Langage
    Réponses: 7
    Dernier message: 01/06/2006, 19h00
  3. [Système] Str_replace et include
    Par CAMB3L dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2006, 16h53
  4. [Système] Pb d'include avec $_GET
    Par JSuper_Kitten dans le forum Langage
    Réponses: 6
    Dernier message: 28/09/2005, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo