Problème avec la fonction Unlink

Problème avec la fonction Unlink - PHP - Programmation

Marsh Posté le 20-11-2009 à 18:00:53    

Hello  :hello:  
 
Pour les besoins d'une galerie photo que je suis en train de coder, j'ai réalisé un script qui permet d'effacer les images situées dans le répertoire sélectionné.
Voici le script:

<?php
if(isset($_GET['gal']))
    {
    $nom_gal = $_GET['gal'];
     
    $req = "DELETE FROM gal_galerie WHERE nom_gal = '$nom_gal'"; // Je supprime le lien de l'image dans la BDD
    $sql = mysql_query($req);
     
    $galerie = 'galeries_util'.'/'.$login.'/'.$nom_gal.'/'.'miniature';
    $dos = opendir($galerie);
    while($file = readdir($dos))
        {
        unlink('galeries_util'.'/'.$login.'/'.$nom_gal.'/'.'miniature'.'/'.$file);
        unlink('galeries_util'.'/'.$login.'/'.$nom_gal.'/'.$file);
        }
        rmdir('galeries_util'.'/'.$login.'/'.$nom_gal.'/'.'miniature');
        rmdir('galeries_util'.'/'.$login.'/'.$nom_gal);
    echo '<b>'.'La galerie a été effacée avec succès !'.'</b>';
    }
?>


 
Cependant lorsque je test le script en local voilà ce qu'il m'affiche.
 


Warning:  unlink(galeries_util/flo/toto/miniature/.) [[url=http://localhost/Galerie/utilisateur/function.unlink]function.unlink[/url]]: Permission denied in C:wampwwwGalerieutilisateurmodulessupprimer_gal.php on line 14
 
Warning:  unlink(galeries_util/flo/toto/.) [[url=http://localhost/Galerie/utilisateur/function.unlink]function.unlink[/url]]: Permission denied in C:wampwwwGalerieutilisateurmodulessupprimer_gal.php on line 15
 
Warning:  unlink(galeries_util/flo/toto/miniature/..) [[url=http://localhost/Galerie/utilisateur/function.unlink]function.unlink[/url]]: Permission denied in C:wampwwwGalerieutilisateurmodulessupprimer_gal.php on line 14
 
Warning:  unlink(galeries_util/flo/toto/..) [[url=http://localhost/Galerie/utilisateur/function.unlink]function.unlink[/url]]: Permission denied in C:wampwwwGalerieutilisateurmodulessupprimer_gal.php on line 15
 
Warning:  rmdir(galeries_util/flo/toto) [[url=http://localhost/Galerie/utilisateur/function.rmdir]function.rmdir[/url]]: Directory not empty in C:wampwwwGalerieutilisateurmodulessupprimer_gal.php on line 18


Les images et le dossier miniature sont bien supprimés mais je comprends pas pourquoi j'ai tous ces warnings. Sachant que c'est moi qui les upload je devrais pas avoir ces avertissement :/
 
Et autre chose que je pige pas, à la ligne 18 il me dit que le dossier n'est pas vide (ce qui empêche de le supprimer) alors que pourtant il l'est bien vide  :sweat:  
 
Donc si vous avez une lanterne ou une lampe de poche en trop  [:tinostar]  Merci


Message édité par Profil supprimé le 20-11-2009 à 18:02:21
Reply

Marsh Posté le 20-11-2009 à 18:00:53   

Reply

Marsh Posté le 20-11-2009 à 18:15:29    

Je crois me souvenir que, lorsque tu fais un readdir(), il met dans la réponse les éléments . et ..

 

Ca semble se confirmer à la vue de tes messages d'erreur. Il faudrait donc que tu effectues un test sur l'existence et la nature de chaque fichier avant de le supprimer (et idem pour les répertoires).

 

Quant à la dernière erreur, supprimes-tu le sous-répertoire "miniature" avant de supprimer le répertoire "toto" ?


Message édité par Fred999 le 20-11-2009 à 18:23:02
Reply

Marsh Posté le 20-11-2009 à 18:16:52    

Sinon, de manière générale, je pense qu'il est de bon ton, lorsque tu utilises un chemin, de commencer par "./", histoire de bien comprendre de quoi tu parles.

Reply

Marsh Posté le 20-11-2009 à 18:34:45    

Ah oui j'avais pas fais gaffe à '.' et '..'  :sweat:  
 
Et ensuite oui le répertoire miniature est bien supprimé en premier pour justement pouvoir effacer le répertoire toto ;)
 
Euh par contre je suis pas certain de comprendre la différence entre './' et '/'  [:fing fang fung]
 
Edit: Je comprends pas cette erreur la:
 

Warning:  unlink(galeries_util/flo/toto/miniature/..)


Pourquoi y a '..' dans le dossier miniature  :??:
 
Edit: Avec cette version du script ça va mieux:
 

<?php
if(isset($_GET['gal']))
    {
    $nom_gal = $_GET['gal'];
     
    $req = "DELETE FROM gal_galerie WHERE nom_gal = '$nom_gal'";
    $sql = mysql_query($req);
     
    $galerie = 'galeries_util'.'/'.$login.'/'.$nom_gal.'/'.'miniature';
    $dos = opendir($galerie);
    while($file = readdir($dos))
        {
        if($file !='.' AND $file !='..')
            {
            unlink('galeries_util'.'/'.$login.'/'.$nom_gal.'/'.'miniature'.'/'.$file);
            unlink('galeries_util'.'/'.$login.'/'.$nom_gal.'/'.$file);
            }
        }
        rmdir('galeries_util'.'/'.$login.'/'.$nom_gal.'/'.'miniature');
        rmdir('galeries_util'.'/'.$login.'/'.$nom_gal);
    echo '<b>'.'La galerie a été effacée avec succès !'.'</b>';
    }
?>


Mais toujours cette erreur: Warning:  rmdir(galeries_util/flo/qds) [function.rmdir]: Directory not empty in C:wampwwwGalerieutilisateurmodulessupprimer_gal.php on line 21
 
[b][/b]Alors que pourtant je dis bien de supprimer le dossier miniature en premier  :heink:


Message édité par Profil supprimé le 20-11-2009 à 19:02:33
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed