Aller au contenu

faire le menage sur mon serveur


genmin

Sujets conseillés

:P 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 :evil:

Lien vers le commentaire
Partager sur d’autres sites

pas si simple car j'ai une fonction rmdir qui ne supprime les rep que si il son vide  :evil:

Tu n'a qu'à créer une fonction recursive qui supprime les fichiers puis les répertoires devenus vides.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ???? :nono:

Warning: rmdir(rep): Permission denied :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Pour changer le mode de tous les fichiers, fais le 'à la volée ' !

chmod() remplace le mode du fichier filename par le mode mode.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :P

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ? :unsure:

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...