genmin Posté 3 Février 2004 Posté 3 Février 2004 Salut Voilà je cherche à créer un script qui ferai le ménage sur mon serveur. je mets une base de données à jours périodiquement. Elle comporte des numéros de dossier, et ces dossier sont présent sur le serveur. Je souhaiterais que lorsque je supprime un enregistrement mon script le détecte et efface le repertoir correspondant. simple non et ben pas si simple car j'ai une fonction rmdir qui ne supprime les rep que si il son vide
Guest exabs Posté 3 Février 2004 Posté 3 Février 2004 pas si simple car j'ai une fonction rmdir qui ne supprime les rep que si il son vide Tu n'a qu'à créer une fonction recursive qui supprime les fichiers puis les répertoires devenus vides.
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 je comprend bien mais je ne connais pas les fichiers dans les répertoires, et ils sont tous différents
Dan Posté 3 Février 2004 Posté 3 Février 2004 Salut Genmin, Utilises cette fonction alors function deldir($dir){ $current_dir = opendir($dir); while($entryname = readdir($current_dir)){ if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")){ deldir("${dir}/${entryname}"); }elseif($entryname != "." and $entryname!=".."){ unlink("${dir}/${entryname}"); } } closedir($current_dir); rmdir(${dir});} Dan
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 ben voilà c'est readdir que je ne trouvais pas, merci Dan. Je vais mettre ca en pratique et je vous tiens au courant.
Anonymus Posté 3 Février 2004 Posté 3 Février 2004 Pour effacer un répertoire, il faut qu'il soit vide. La liste des fichiers d'un répertoire est celle ci <? $dirname='chat'; $dh=opendir($dirname); while (gettype($file=readdir($dh)) != 'boolean'){ if (is_dir($dirname."/".$file))echo""; echo " $file <br>"; } closedir($dh); ?> Attention, la liste comporte le répertoire '.' et '..'. Il suffit donc d'effacer, de la liste produite, les fichiers un par un. Pour cela, un 'unlink' suffit, à condition de le mettre pour chaque fichier sauf les '.' et '..'. Donc : <? $dirname='test'; $dh=opendir($dirname); while (gettype($file=readdir($dh)) != 'boolean'){ if (is_dir($dirname."/".$file))echo""; echo "<br>$file "; if ( ! _AT_unlink ($dirname."/".$file)) echo" : fichier non efface"; else echo" : fichier effacé"; } closedir($dh); ?> Efface les fichiers du répertoire mentionné dans $dirname. Anonymus.
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 Alors voilà je viens d'essayer le script de Dan et ca marche pas totalement, déjà il faut que je passe tout les fichiers en 777 pour pouvoir les supprimer mais le répertoire lui ne s'efface pas ???? Warning: rmdir(rep): Permission denied
Anonymus Posté 3 Février 2004 Posté 3 Février 2004 Pour changer le mode de tous les fichiers, fais le 'à la volée ' ! chmod() remplace le mode du fichier filename par le mode mode.
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 merci pour ce truc, si tu as une idée pour le repertoire qui lui ne s'efface pas, merci.
Dan Posté 3 Février 2004 Posté 3 Février 2004 Salut Genmin, Pour pouvoir effacer un fichier ou un répertoire, il faut avoir des droits d'écriture dans le répertoire parent Donc pour effacer le tépretoire toto dans .../tmp/toto , il faut que l'utilisateur exécutant le scrip ait le droit d'écriture dans .../tmp/ Dan
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 OK Dan ca explique pourquoi le repertoire ne s'efface pas alors!! je vais essayer de lancer le script par le serveur comme ca, ca devrait marcher. Merci
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 oups voilà que je ne peu pas utiliser la fonction chmod() Warning: chmod(): Operation not permitted Je cherche ....
Anonymus Posté 3 Février 2004 Posté 3 Février 2004 As tu mis ton chmod en 4 chiffres ? 0777 et non 777
Dan Posté 3 Février 2004 Posté 3 Février 2004 oups voilà que je ne peu pas utiliser la fonction chmod()Warning: chmod(): Operation not permitted Salut Genmin, Le chmod est parfois désactivé chez certains hébergeurs, comme Online si mes souvenirs sont bons. Cela est souvent associé à un Php tournant en "safe mode" Dan
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 j'avous avoir fait l'erreur, mais je m'en suis apercu et ai rectifié, mais ca ne marche pas mieux
Anonymus Posté 3 Février 2004 Posté 3 Février 2004 2 possibilités. Tu n'est pas connecté en 'root', il reste des fichiers caché. (type htaccess)
Anonymus Posté 3 Février 2004 Posté 3 Février 2004 Essaie donc : chown("directory/", nobody); chmod("directory/", 0777); change le propriétaire du fichier, change le chmod
genmin Posté 3 Février 2004 Auteur Posté 3 Février 2004 alors la j'ai des lacunes. comment puis je savoir comment je suis connecté? Pour le moment je pose mon script php par ftp et l'execute avec mon explorer. es ce que si je lance le script directement par le serveur par exemple par une tache planifiée ca irai mieux ?
Dan Posté 3 Février 2004 Posté 3 Février 2004 Salut Genmin, Si tu es sur un serveur dédié, Apache tourne probablement sous un identifiant nobody (tu trouves cette info en regardant le UserID des process httpd en faisant une commande 'ps -alx'). A moins de tourner php en CGI avec le mode suexec, il y a aussi de fortes chances qu'il tourne sous le meme identifiant que Apache. Donc, en tant que user "nobody" il n'a le droit de changer les permissions ou le propriétaire que des fichiers qui lui appartiennent. Il faut donc que le "owner" du fichier soit le même que le "user" tournant Apache. Il est chez qui ton dédié ? Dan
genmin Posté 4 Février 2004 Auteur Posté 4 Février 2004 Il semblerait que l'identifiant soit 'root', et je ne sais plus chez qui il est le serveur
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant