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 :

Perdu dans la priorité des fonctions


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 65
    Points
    65
    Par défaut Perdu dans la priorité des fonctions
    Bonsoir à tous

    Je cherche à copier un dossier et son contenu, puis de supprimer le dossier d'origine.
    Coté fonctions, j'ai fait ça: (Tout est résumé et simplifié, la fonction étant assez longue)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function copier($elements, ...) {
    	foreach ($elements as $element) {
    		[...]
    		if ($element["type"] == "fichier") { // Fichier
    			// Utilisation de la fonction rename()
    		} else { // Dossier
    			// Creation du dossier de destination
    			// Récupération du contenu du dossier dans le tableau $elements_dossier sous la forme [nom => Nom du fichier/dossier, type => dossier ou fichier]
    			copier($elements_dossier, ...); // Relance la fonction pour le sous-dossier avec les variables adaptées
    			rmdir(...); // Suppression du dossier d'origine
    		}
    	}
    }
    Le code fonctionne parfaitement, sauf pour la suppression du dossier d'origine qui a l'air de s'exécuter alors que la fonction copier() n'aie pas terminée son boulot, c'est à dire déplacer les fichiers/dossiers.
    Je ne sais pas du tout comment faire pour que le dossier d'origine soit supprimé après que son contenu soit déplacé.

    J'espère avoir été suffisamment clair, et si vous souhaitez le code de la fonction au complet, il n'y a pas de soucis

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 33
    Points : 38
    Points
    38
    Par défaut
    Bonsoir,

    Essaie en sortant ton rmdir du foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function copier($elements, ...) {
    	foreach ($elements as $element) {
    		[...]
    		if ($element["type"] == "fichier") { // Fichier
    			// Utilisation de la fonction rename()
    		} else { // Dossier
    			// Creation du dossier de destination
    			// Récupération du contenu du dossier dans le tableau $elements_dossier sous la forme [nom => Nom du fichier/dossier, type => dossier ou fichier]
    			copier($elements_dossier, ...); // Relance la fonction pour le sous-dossier avec les variables adaptées
    		}
    		rmdir(...); // Suppression du dossier d'origine
    	}
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    Merci pour ta réponse.

    En fait le nom du dossier est contenu dans $elements, qui est un tableau, donc je ne peux pas sortir de mon foreach.

    J'ai trouvé la réponse à mon problème en stockant au fur et à mesure le nom des dossiers à supprimer dans un tableau, puis en supprimant ces dossiers via une boucle, juste après le foreach de copier().

    Ça donne ça:

    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
    $dossiers_vides = array();
    function copier($elements, ...) {
    	foreach ($elements as $element) {
    		[...]
    		if ($element["type"] == "fichier") { // Fichier
    			// Utilisation de la fonction rename()
    		} else { // Dossier
    			// Creation du dossier de destination
    			// Récupération du contenu du dossier dans le tableau $elements_dossier sous la forme [nom => Nom du fichier/dossier, type => dossier ou fichier]
    			copier($elements_dossier, ...); // Relance la fonction pour le sous-dossier avec les variables adaptées
    			array_push($dossiers_vides, $element["nom"]); // Ajout du dossier dans le tableau
    		}
    	}
    
    	if ($mode == "couper" && count($dossiers_vides)) {
    		foreach($dossiers_vides as $dossier_vide) {
    			rmdir($source.$dossier_vide);
    		}
    	}
    }
    J'ai mis en gras les bouts de codes qui ont été rajoutés.

    Voilou c'est

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2011, 02h37
  2. Pourquoi "mov edi,edi" dans le prologue des fonctions ?
    Par chuko dans le forum Assembleur
    Réponses: 3
    Dernier message: 01/10/2008, 22h35
  3. Perdu dans la foret des threads..
    Par Krishna dans le forum C++
    Réponses: 10
    Dernier message: 19/06/2008, 08h30
  4. [Upload] Perdu dans la gestion des images
    Par thewaawshow dans le forum Langage
    Réponses: 9
    Dernier message: 19/09/2007, 14h32
  5. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

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