Aller au contenu

faire le menage sur mon serveur


Sujets conseillés

Posté

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

Posté
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.

Posté

je comprend bien mais je ne connais pas les fichiers dans les répertoires, et ils sont tous différents

Posté

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

Posté

ben voilà c'est readdir que je ne trouvais pas, merci Dan.

Je vais mettre ca en pratique et je vous tiens au courant.

Posté

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.

Posté

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:

Posté

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

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

Posté

merci pour ce truc, si tu as une idée pour le repertoire qui lui ne s'efface pas, merci.

Posté

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

Posté

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

Posté

oups voilà que je ne peu pas utiliser la fonction chmod()

Warning: chmod(): Operation not permitted

:yoot::nono:

Je cherche ....

Posté
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

Posté

j'avous avoir fait l'erreur, mais je m'en suis apercu et ai rectifié, mais ca ne marche pas mieux

Posté

2 possibilités.

Tu n'est pas connecté en 'root',

il reste des fichiers caché. (type htaccess)

Posté

Essaie donc :

chown("directory/", nobody);

chmod("directory/", 0777);

change le propriétaire du fichier, change le chmod

Posté

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:

Posté

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

Posté

Il semblerait que l'identifiant soit 'root', et je ne sais plus chez qui il est le serveur :blush:

Veuillez vous connecter pour commenter

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



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