Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[PHP] Problème de suppression de dossier


alex.hitman

Messages recommandés

Bonsoir, je suis en train de faire une fonction de suppression de dossier.

 

Celle-ci doit permettre de supprimer un dossier qui n'est pas vide (qui contient des dossiers, sous-dossiers et fichiers etc...).

J'essai donc avec une fonction récursive :

 

function effacer($dir)
{
 if($objet = glob($dir."/*"))
 {
foreach($objet as $obj)
{
  if(is_dir($obj))
  {
	effacer($obj);
  }
  else
  {
	unlink($obj);
  }
}
 }
 rmdir($dir);
}

effacer('export/');

 

Je précise que le dossier à supprimer (ici export) a tous les droits, et que le script qui utilise cette fonction les a aussi.

 

 

Seulement, cela ne fonctionne pas, j'ai un joli "Warning: rmdir(export/): Permission denied..."

 

 

Savez-vous d'où peut provenir l'erreur ?

 

 

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

le dossier à supprimer (ici export) a tous les droits, et que le script qui utilise cette fonction les a aussi.

Question bête : est-ce le script qui détermine les droits ou bien l'exécutable qui va lire et interpréter ce script ?

Avec quels droits php est-il invoqué ?

Lien vers le commentaire
Partager sur d’autres sites

Je vais donc tout expliquer pour répondre à ta question.

 

J'ai un script export.php (celui dans lequel est la fonction), qui va créer le dossier export/ ainsi que des dossiers et des fichiers textes à l'intérieur.

Seulement, je dois le vider à chaque lancement du fichier export.php, c'est pour cela que j'utilise cette fonction qui va tout supprimer, avant que le script ne recréé le dossier export/ et tout ce qui va à l'intérieur.

 

Donc oui, c'est le script qui détermine les droits.

 

export.php est d'origine en 777 et export/ est en 777.

Les autres dossiers et fichiers créés par export.php sont laissés en droits par défaut, et je viens de m'appercevoir que ce n'est pas 777, mais 755 pour les dossiers et 644 pour les fichiers !

 

 

Peut-être que le problème vient de là ?

Lien vers le commentaire
Partager sur d’autres sites

Tu appelles ton script en ligne de commande, sans appeler l'interpréteur ? (i.e. ton script commence-t-il par "#!/bin/php" (ou quelque chose de similaire) ?)

Qui sont les owner / group des fichiers créés ?

Est-ce que tu as la possibilite d'ajouter l'exécution d'une commande du style "fuser -vu export" pour voir s'il n'y a pas de thread de php qui lockerait le répertoire ?

Lien vers le commentaire
Partager sur d’autres sites

Eu... merci de m'aider, mais j'avoue ne pas tout comprendre !

 

1- Mon script commence par <?php

2- Je ne comprends pas, qu'entends-tu par owner / group de fichiers ?

3- Je crois que ça doit être possible car je met ce que je veux dans mon script (mais je sens que je n'ai pas compris non plus !)

 

 

Pourrais-tu me préciser le sens de tes questions plus simplement stp ?

 

 

Merci :P

Lien vers le commentaire
Partager sur d’autres sites

Ah, si ton script commence par <?php c'est donc bien ce que j'avais cru comprendre au début : ton script est inclus dans une page web et c'est le serveur Web (ou un de ses modules) qui va lancer l'interpréteur pour exécuter le script.

Quand je parle de owner/group, je veux parler des infos qui apparaissent lorsque l'on fait un "ls -l" et que l'on peut modifier avec la commande "chown". A qui appartient le répertoire export/ et à qui appartiennent les fichiers qui vont être placés dedans ?

Si tu mets ce que tu veux dans ton script, est-ce qu'il t'est possible d'exécuter la commande système "fuser -vu export" juste avant de tenter le "rmdir()" ? Ca permettra de voir quels processus utilisent ce répertoire (pour le cas où ce ne serait pas qu'on problème de droits)

Lien vers le commentaire
Partager sur d’autres sites

Si j'ai bien compris, les commande "ls -l" et "fuser -vu export" dont tu me parle sont à faire en ligne de commande. Seulement, je suis sur un hébergement mutualisé, et je n'ai pas accès aux lignes de commandes.

 

Je ne peux pas te dire à qui appartient le répertoire export/, je sais seulement que les fichiers et dossiers qui sont à l'intérieur, je ne peux pas les supprimer par ftp ! Je dois obligatoirement passer par l'interface de mon hébergeur... Je crois donc que ces fichiers n'appartiennent pas à l'utilisateur (moi).

Lien vers le commentaire
Partager sur d’autres sites

OK...

 

Dommage que ce soit un problème "distant" :-/

Effectivement, si tu te loggues avec ton compte (par ftp) et que tu ne peux pas supprimer le répertoire, c'est un problème de droit. Problème qui semble -partiellement - résolu par le fait que tes scripts php sont exécutés sur la machine par un processus qui a des privilèges supérieurs aux tiens (oserais-je dire que c'est assez dangereux pour la protection des données entre comptes mutualisés ?).

 

Ton logiciel ftp ne te permet pas de faire un ls -l et ainsi obtenir la liste des droits et la liste des owner/group ? Avec un client FTP en ligne de commande tu peux faire "ls -l", et avec certains client "graphiques" il est possible d'avoir l'affichage des commandes et des réponses du serveur en plus de la belle interface qui te file des icônes...

Lien vers le commentaire
Partager sur d’autres sites

Comme client FTP, j'utilise Filezilla, et j'ai bien une option "Entrez une commande FTP", mais aucune des commandes n'est reconnue.

 

Connaîs-tu un client (graphique ou non) qui me permette d'effectuer ces commandes ?

Là je cherche... mais je ne trouve pas (pour Windows en tout cas).

 

 

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Hum...

Je connais bien un client ftp sous Windows, mais je ne suis pas certain que tu apprécies... C'est Démarrer --> Exécuter --> "ftp"

:-/

 

A part ça, je ne vois pas... Ces derniers temps j'utilisais surtout WinSCP mais j'ignore s'il sait gérer du FTP...

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...