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 :

[FTP] Supprimer récursivement un répertoire


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [FTP] Supprimer récursivement un répertoire
    Bonjour,

    Je sais que cette question a été posée plein de fois mais je n'arrive pas a résoudre mon problème.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    	function supprimer_repertoire($dir) 
    	{
    		$current_dir = opendir($dir);	
    		while($entryname = readdir($current_dir)) 
    		{
    			if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")) 
    			{
    				supprimer_repertoire("${dir}/${entryname}");
    			} 
    			elseif($entryname != "." and $entryname!="..")
    			{
    				unlink("${dir}/${entryname}");
    			}
    		} //Fin tant que
    		closedir($current_dir);
    		rmdir(${dir});
    	}
     
    	// on teste si le formulaire permettant de supprimer un dossier à été soumis
    	if (isset($_GET['del_rep'])) {
    		if (empty($_GET['del_rep'])) {
    		// si le paramètre n'est pas renseignée, on affiche un petit message d'erreur
    		$erreur = 'Aucun dossier à supprimer';
    		}
    		else {
    			$dir_remove = $_GET['del_rep'];
    			supprimer_repertoire('../pics/'.$dir_remove);
    			supprimer_repertoire('../mini/'.$dir_remove);
    		}
    	}
    ?>
    <p>Liste des galeries</p>
    <?php
    	//affiche uniquement les dossiers
    	$rep = '../pics';
    	$directory = opendir($rep);
    	echo '<table border="1">';
    		while ($f = readdir($directory))
    		{
    			if ($f !="." && $f != "..")
    			{
    				if(is_dir($rep."/".$f)) {
    				echo '<tr>
    						<td>'.$f.'</td>
    						<td><a href="gerer_rep_photo.php?del_rep='.$f.'">supprimer</a></td>
    					  </tr>';	
    				}
    			}
    		}
    	echo '</table>';
    ?>
    Voilà ce script marche mais ne supprime pas le dossier que je veux, seulement son contenu ! Comment faire pour supprimer le dossier également ? Est-ce un problème de droit ?

    Merci !

    Siriru

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Pour supprimer un répertoire il faut qu'il soit vide.
    Utilises ceci pour supprimer le contenu : Comment supprimer massivement des fichiers ?
    Ensuite ta fonction pour retirer le répertoire : rmdir

    Désolé j'ai pas regardé le code faute de temps.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oui mais justement, le code supprime tous les fichiers par récursivité avant de supprimer le dossier.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565

  5. #5
    Invité
    Invité(e)
    Par défaut
    Humm, je ne comprend pas trop, en fait que veux dire ${mavariable}

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    ben justement, ${mavariable} ca ne veux rien dire.

    Quand l'interpréteur PHP voit ca il dit :

    * "$" (dollar) ! donc ce qui suit est une variable !
    * "{" ! Ok, c'est une variable dynamique dont le nom est construit a la main !
    * "mavariable" ! mmmhhhhh... c'est pas une chaine entre guillemet, c'est donc une constante !
    * (parcours de la table de constante) ! Mince ! "mavariable" existe pas dans la liste des constantes connues ! Le developpeur a du se planter et oublier les guillemets (tssss...) je vais le considerer comme une chaine de caracteres
    * "}" ! Ok, c'est la fin du nom de ma variable dynamique, c'est quoi son nom au final ? "mavariable" ! Ok, Donc le nom de la variable est "$mavariable"
    * $mavariable !

    Comme tu vois, tu tortures le pauvre interpréteur parce que ${mavariable} c'est la version super crade de $mavariable et ca sert a rien ;o)

    Les accolades sont là pour 2 raisons uniquement :
    * Construire des variables dynamiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $i=42;
    ${'maVariableNumero'.$i} = 'toto';
    echo $maVariableNumero42; // affiche "toto";
    * Aider le parseur lorsque la variable est incluse dans une chaine de caractere sans etre séparée d'espace ou de caracteres invalides pour une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $maVariable=42;
    echo "Ca vaut $maVariableeuros"; // genere une erreur, $maVariableeuros inconnue
    echo "Ca vaut {$maVariable}euros"; // affiche "Ca vaut 42euros"
    echo "Ca vaut $maVariable euros"; // affiche "Ca vaut 42 euros"
    Comme tu vois, dans le 2eme cas, l'accolade ouvrante est située AVANT le dollar.

    Pour finir je dirais que en regle générale :

    * Un tableau est plus interessant que d'utiliser des variables dynamique pour le 1er cas
    * La concaténation de chaine, sprintf, printf, et cie permettent de s'affranchir du 2eme cas.

    Et si tu veux vraiment eviter les problemes, je te déconseille fortement l'utilisation d'un tableau dans une chaine de caractere...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "... $tableau[truc]....";
    est une horreur, accolade ou pas, parce que le parseur n'a aucun moyen de savoir que "truc" est une chaine et pas une constante.
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '...'.$tableau['truc'].'....';
    Fladnag, defenseur des pauvres parseurs PHP qui en voient de belles a longueur de journée ;o)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bon je viens de comprendre, je suis sur Free et ils ont désactivé la fonction rmdir(). Peut-on contourner ca ou pas ?

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Ils ont du désactiver les fonctions de contournement aussi ;o)

    essaye unlink("nomDeRepertoire"); mais je pense pas que ca fonctionne...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ils ont désactivé ftp_connect(), rmdir() et compagnie

  10. #10
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Sous Free tu peux rien y faire. Désolé.

    Par contre ce que tu peux faire c'est de déplacer tous les dossiers à supprimer (manuellement) dans un autre avec l'intitulé A supprimer, par exemple.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Okay merci pour le conseil !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Alors je vais essayer de me pencher sur ca, mais je ne connais pas les fonctions qui permettent de déplacer un dossier ni celle qui permet de copier un dossier (je ne sais pas si c'est possible sur free. De l'aide serait la bienvenue, merci !

  13. #13
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    C'est possible sur Free (sinon je l'aurai pas dit )

    Et les fonctions (tout est sur php.net) : rename

  14. #14
    Invité
    Invité(e)
    Par défaut
    Pour free je parlais uniquement de la deuxieme fonction, copier un fichier. J'aimerai contourner l'interdiction de créer un fichier en mettant sur le ftp un dossier "defaut", et a chaque fois que je veux créer un dossier, je copie le dossier defaut et je le renomme.

  15. #15
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Je ne comprends pas ce que tu veux.

    De souvenir tout est possible pour la création de fichier, de dossier. Les fonctions sont sur cette page : Fonctions sur les systèmes de fichiers

Discussions similaires

  1. Commande ftp pour récupérer un répertoire entier
    Par SuperCed dans le forum Développement
    Réponses: 3
    Dernier message: 09/01/2008, 10h06
  2. FTP : Récupérer tout un répertoire
    Par tiboudchou dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 08/11/2006, 18h07
  3. [FTP] opendir sur un répertoire distant
    Par HurtMarley dans le forum Langage
    Réponses: 14
    Dernier message: 25/08/2006, 16h49
  4. [FTP] supprimer un repertoire
    Par albo69 dans le forum Langage
    Réponses: 18
    Dernier message: 19/01/2006, 22h54
  5. Copie récursive de répertoire
    Par Furius dans le forum Langage
    Réponses: 21
    Dernier message: 11/01/2006, 20h25

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