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 :

Boucle While et fonction Require combinées


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut Boucle While et fonction Require combinées
    Bonjour,

    J'aimerai utiliser la fonction require dans une boucle while pour appeler différentes pages de plusieurs répertoires. Ce qui permettrait d'éviter une dizaine de require dans la page et donc d'optimiser mon code.
    Configuration actuelle (on sait jamais):
    Mac
    XAMPP pour Mac OS X 1.7.3

    Voici le code en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $repertoire = $DOCUMENT_ROOT.'modules/';
    $scan = scandir($repertoire);
    while (file_exists($scan.'fonctions.php'))
    {
    	require ($scan.'fonctions.php');
    }
    J'ai fais un print_r de scan et il affiche bien les répertoires. De plus, j'ai une page fonctions.php à la racine de mon site et des fonctions dans chaque module du site.
    Une erreur s'affiche en réactualisant la page principale:
    Fatal error: Call to undefined function ...

    Les fonctions touchées se trouvent dans les modules. Ainsi quand je mets en commentaire les fonctions concernées, le site s'affiche avec les fonctions qui tournent à la racine.
    Donc je cherche un moyen de faire marcher cette boucle. En comparaison avec une autre page qui réuni les paramètres de chaque module: ce code marche. Donc je pense que c'est vraiment au niveau du fonctions.php de la racine et les fonctions de chaque module que le problème survient.

    J'espère avoir été le plus clair possible. Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $repertoire = $DOCUMENT_ROOT.'modules/';
    $scan = scandir($repertoire);
    while (file_exists($scan.'fonctions.php'))
    {
    	require ($scan.'fonctions.php');
    }
    Soit tu as une boucle sans fin, soit ta boucle n'est jamais exécutée.

  3. #3
    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
    Tu devrais remplacer : $DOCUMENT_ROOT par __DIR__

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    @Séb

    Que veux-tu dire ?
    Pourtant la tableau des dossiers s'affiche bien avec print_r.

    @rawsrc

    Norme de php5 je suppose ? Mais cela ne répond pas à la question

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Oliix Voir le message
    @Séb

    Que veux-tu dire ?
    Ta conditionnelle de boucle après évaluation se résume à un while ( TRUE ) ou un while ( FALSE ) qui ne peut jamais varier puisque le file_exists( ) teste toujours le même $scan (un tableau d'ailleurs).

    Pourtant la tableau des dossiers s'affiche bien avec print_r.
    Montre-nous.

  6. #6
    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
    Séb. te signale à juste titre que ton code a deux issues : boucle sans fin ou pas de boucle.
    Avec scandir tu récupères un tableau, ensuite ta boucle s'assure uniquement que la première entrée de ton tableau correspond à un fichier. Et elle ne fait rien d'autre : le pointeur dans le tableau n'est pas décalé et tu reste toujours sur la première entrée...

    Quant à moi, j'ai juste supposé que ta variable $DOCUMENT_ROOT venait de $_SERVER['DOCUMENT_ROOT'] et que pour les chemins de fichiers, il faut utiliser __DIR__ qui est bien plus fiable que l'autre (liens symboliques)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    Test du print_r:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $repertoire = 'modules/';
    $scan = scandir($repertoire);
    while (file_exists($scan.'fonctions.php'))
    {
    	require($scan.'fonctions.php');
    }
    print_r($scan);
    Résultat:
    Array ( [0] => . [1] => .. [2] => .DS_Store [3] => index.php [4] => mod_accueil [5] => mod_articles [6] => mod_catimmobilier [7] => mod_catproduits [8] => mod_commentaires [9] => mod_documentation [10] => mod_formulaires [11] => mod_membres [12] => mod_pages [13] => mod_rappelImmediat [14] => mod_rubriques [15] => mod_sitemap [16] => mod_speedlinks )

  8. #8
    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
    Donc, tu dois reprendre ton code afin de décaler le pointeur interne du tableau à chaque itération : soit en utilisant foreach soit next($array)

  9. #9
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Array ( [0] => . [1] => .. [2] => .DS_Store [3] => index.php [4] => mod_accueil [5] => mod_articles [6] => mod_catimmobilier [7] => mod_catproduits [8] => mod_commentaires [9] => mod_documentation [10] => mod_formulaires [11] => mod_membres [12] => mod_pages [13] => mod_rappelImmediat [14] => mod_rubriques [15] => mod_sitemap [16] => mod_speedlinks )
    Faudra aussi penser à séparer le répertoire du fichier avec / et ajouter modules/

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    Je commence à comprendre. Alors je dois parcourir $scan (tableau) avec un foreach. Je vais tester..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $repertoire = 'modules/';
    $scan = scandir($repertoire);
    foreach($scan as $i => $val)
    {
    	require($repertoire.$val.'/fonctions.php');
    	$i++;
    }
    Nouvelles erreurs:
    Warning: require(modules/./fonctions.php) [function.require]: failed to open stream: No such file or directory in /Applications/XAMPP/xamppfiles/htdocs/kryzalid/www/modules_fonctions.php on line 31

    Fatal error: require() [function.require]: Failed opening required 'modules/./fonctions.php' (include_path='.:/Applications/XAMPP/xamppfiles/lib/php:/Applications/XAMPP/xamppfiles/lib/php/pear') in /Applications/XAMPP/xamppfiles/htdocs/kryzalid/www/modules_fonctions.php on line 31

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 646
    Billets dans le blog
    20
    Par défaut
    Attention, scandir() va te retourner le dossier en cours et le dossier parent (./ et ../), il faut les gérer !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    A cause des valeurs suivantes : Array ( [0] => . [1] => ..

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    Je sais bien ça, je veux savoir comment les gérer. Je ne trouve pas la solution. Il faut les supprimer du tableau ?

  14. #14
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Oliix Voir le message
    Je sais bien ça, je veux savoir comment les gérer.
    Avec un if( )

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Par défaut
    Merci j'ai débloqué la situation

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

Discussions similaires

  1. [XL-2003] Problème de compilation fonction IF et boucle while
    Par sims92.66 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/09/2012, 14h33
  2. boucle dans un fonction While Wend
    Par jeanpierre67 dans le forum IHM
    Réponses: 2
    Dernier message: 15/11/2011, 22h52
  3. multiples array dans un, combiner avec boucle while
    Par leymiris dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2010, 16h19
  4. fonction mail dans une boucle while
    Par tjoce dans le forum Langage
    Réponses: 5
    Dernier message: 23/04/2010, 18h39
  5. fonction avec la boucle while
    Par hanou88 dans le forum C
    Réponses: 4
    Dernier message: 04/12/2009, 03h42

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