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 :

return NULL string


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut return NULL string
    Bonjour

    J'ai un probleme de return, lorsque lance ce script, celui ci m'affiche NULL
    alors que si je remplace return $file[10] par echo $file[10], cela m'affiche bien ma chaine de caractere voulu, je ne comprends pas pourquoi dans le cas d'un return il m'affiche null, pouvez vous m'eclairer ?

    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
    $directory = dirname(__FILE__)."/xml/111208-photos_ADF";
    
    function lister($chemin){   
      	$nom_repertoire = $chemin;
      	$pointeur = opendir($nom_repertoire);
    	while ($fichier = readdir($pointeur)){
    		if(($fichier != '.') && ($fichier != '..')){
    			$found=$nom_repertoire.'/'.$fichier;
    			 if (is_dir($nom_repertoire.'/'.$fichier))
                		lister($nom_repertoire.'/'.$fichier);
            	else
            		if (is_file($found) && eregi(".jpg", $found))	{
    					$file=explode('/', $found);
    					return $file[10];
    				}
    			}
    		}
    	closedir($pointeur);
    }
    $doc =lister($directory);
     var_dump($doc);

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Je ne vois pas pourquoi echo te renverrait une donnée que return ne pourrait pas.
    Ton return $file[10]; correspond à quoi ? Nom du fichier ?
    Avec ton code tu cherches à faire quoi ? Récupérer le 1er fichier .jpg d'un répertoire c'est ça ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    Je ne vois pas pourquoi echo te renverrait une donnée que return ne pourrait pas.
    Ton return $file[10]; correspond à quoi ? Nom du fichier, extension ?
    Avec ton code tu cherches à faire quoi ? Récupérer le 1er fichier .jpg d'un répertoire c'est ça ?
    Ca correspond au nom des fichier ex : 62-STIENNE-M-15173.jpg

    dans le cas ou je fais un echo $file[10]:
    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
    $directory = dirname(__FILE__)."/xml/111208-photos_ADF";
     
    function lister($chemin){   
      	$nom_repertoire = $chemin;
      	$pointeur = opendir($nom_repertoire);
    	while ($fichier = readdir($pointeur)){
    		if(($fichier != '.') && ($fichier != '..')){
    			$found=$nom_repertoire.'/'.$fichier;
    			 if (is_dir($nom_repertoire.'/'.$fichier))
                		lister($nom_repertoire.'/'.$fichier);
            	else
            		if (is_file($found) && eregi(".jpg", $found))	{
    					$file=explode('/', $found);
    					echo $file[10].'<br/>';
    				}
    			}
    		}
    	closedir($pointeur);
    }
    //$doc =lister($directory);
    //var_dump($doc);
    lister($directory);
    ca m'affiche bien mon tableau et je cherche a le return :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    62-LUBRET-J-15158.jpg
    62-PICQUE-J-15168.jpg
    62-BARBIER-J-15117.jpg
    62-MACIEJASZ-D-15159.jpg
    62-LEDENT-M-15151.jpg
    62-LEROY-J-15154.jpg
    62-CORBISEZ-J-15121.jpg
    62-LOUF-M-15157.jpg
    62-PERON-S-15164.jpg

    dans le cas ou je remplace l'echo par return $file[10];
    le return ne devrait pas contenir mon tableau ci dessus ?

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ahem... Tu fais ton return en plein milieu d'une boucle toi ?

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Ahem... Tu fais ton return en plein milieu d'une boucle toi ?
    Bah oui si tu veux juste récupérer le 1er élément (c'est pas la meilleure approche je te l'accorde mais ça peut le faire)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Le probleme viendrai de l'emplacement de mon return ?

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    oui,
    voici comment faire :
    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
    function lister($chemin){
       $files = array();   
       $nom_repertoire = $chemin;
       $pointeur = opendir($nom_repertoire);
       while ($fichier = readdir($pointeur)){
          if(($fichier != '.') && ($fichier != '..')){
             $found=$nom_repertoire.'/'.$fichier;
             if (is_dir($nom_repertoire.'/'.$fichier))
                lister($nom_repertoire.'/'.$fichier);
             else
             if (is_file($found) && eregi(".jpg", $found))	{
                $file = explode('/', $found);
                $files[] = $file[10];
             }
          }
       }
       closedir($pointeur);
       return $files; // Array([] => filename)
    }
    Mais bon, c'est assez désuet comme approche depuis qu'il existe le RecursiveDirectoryIterator

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Merci pour vos reponses,

    alors quand j'ai teste :

    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
    function lister($chemin){
       $files = array();   
       $nom_repertoire = $chemin;
       $pointeur = opendir($nom_repertoire);
       while ($fichier = readdir($pointeur)){
          if(($fichier != '.') && ($fichier != '..')){
             $found=$nom_repertoire.'/'.$fichier;
             if (is_dir($nom_repertoire.'/'.$fichier))
                lister($nom_repertoire.'/'.$fichier);
             else
             if (is_file($found) && eregi(".jpg", $found))	{
                $file = explode('/', $found);
                $files[] = $file[10];
             }
          }
       }
       closedir($pointeur);
       return $files; // Array([] => filename)
    }
    en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $coco = lister($directory);
    foreach($coco as $element=>$coco)
    	echo $element.'<br/>';
    je n'ai rien qui s'affiche.

    en fasant un var_dump de ma fonction a la place du foreach :

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Oui c'est du récursif donc c'est normal que t'ais rien ($files est réinitialisé à chaque appel), essaies avec 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    function lister($chemin, array &$files){
       $nom_repertoire = $chemin;
       $pointeur = opendir($nom_repertoire);
       while ($fichier = readdir($pointeur)){
          if(($fichier != '.') && ($fichier != '..')){
             $found=$nom_repertoire.'/'.$fichier;
             if (is_dir($nom_repertoire.'/'.$fichier))
                lister($nom_repertoire.'/'.$fichier, $files);
             else
             if (is_file($found) && eregi(".jpg", $found))   {
                $file = explode('/', $found);
                $files[] = $file[10];
             }
          }
       }
       closedir($pointeur);
    }
     
    $files = array();
    $directory = dirname(__FILE__)."/xml/111208-photos_ADF";
    lister($directory, $files);
    foreach($files as $filename) {
       echo $filename.'<br/>';
    }

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Oui c'est du récursif donc c'est normal que t'ais rien ($files est réinitialisé à chaque appel)
    Ca marche ! merci beaucoup !

    mais je n'ai pas compris cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lister($chemin, array &$files)
    que veut dire array&$files ? $files a ce moment la est directement declare comme array ?

  11. #11
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par soryo Voir le message
    mais je n'ai pas compris cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lister($chemin, array &$files)
    que veut dire array&$files ? $files a ce moment la est directement declare comme array ?
    Par défaut PHP passe les variables scalaires par copie, le fait de mettre un &$files indique que l'on souhaite passer la référence mémoire de la variable à la fonction et non une copie de la variable en elle-même.
    En codant ceci : $files = array();, on initialise une variable tableau que notre fonction pourra remplir. Si tu regardes bien la fonction ne fait aucun return, elle se contente de remplir le tableau à l'adresse mémoire que nous lui avons fourni.
    Vu que la variable a été initialisée en dehors de la fonction, nous pouvons vérifier son contenu après que la fonction ait terminé sa tâche.
    Ce que l'on fait en ligne 24 avec foreach($files as $filename)

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 40
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Par défaut PHP passe les variables scalaires par copie, le fait de mettre un &$files indique que l'on souhaite passer la référence mémoire de la variable à la fonction et non une copie de la variable en elle-même.
    En codant ceci : $files = array();, on initialise une variable tableau que notre fonction pourra remplir. Si tu regardes bien la fonction ne fait aucun return, elle se contente de remplir le tableau à l'adresse mémoire que nous lui avons fourni.
    Vu que la variable a été initialisée en dehors de la fonction, nous pouvons vérifier son contenu après que la fonction ait terminé sa tâche.
    Ce que l'on fait en ligne 24 avec foreach($files as $filename)
    c'est tres utile et Merci beaucoup Rawsrc !

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

Discussions similaires

  1. Decode return null
    Par gibono dans le forum SQL
    Réponses: 16
    Dernier message: 18/03/2009, 14h24
  2. [Security] HttpSession returned null object for ACEGI_SECURITY_CONTEXT
    Par Elmour dans le forum Spring
    Réponses: 0
    Dernier message: 05/03/2009, 14h25
  3. GetDlgItem return NULL pointer
    Par karim2009 dans le forum Visual C++
    Réponses: 33
    Dernier message: 09/02/2009, 18h45
  4. getNamespaceURI return null
    Par *alexandre* dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 03/10/2007, 14h23
  5. Pointeur intelligent boost : return NULL ->comment faire?
    Par choinul dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 21/12/2005, 16h24

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