Vider rapidement un répertoire sur serveur


OTP
Modérateur
Modérateur
 
Messages: 19532
Inscription: 16 Déc 2005

Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:25

Bonsoir,

J'utilise une gestion de cache sur mon site.
Le souci est que le site compte plus de 200 000 pages et vider ce cache est très long.

J'utilise actuellement cette méthode :

Code: Tout sélectionner
function SureRemoveDir($dir)
{
    if(!$dh = @opendir($dir)) return;
   while (($obj = readdir($dh)))
   {
      if($obj=='.' || $obj=='..') continue;
      if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
   }
}   


Mais sur mon mutu ça prend des plombes.

Connaissez-vous un moyen rapide de vider un répertoire bien encombré ?

Merci d'avance,

OTP


lunicrea
WRInaute impliqué
WRInaute impliqué
 
Messages: 516
Inscription: 30 Aoû 2010

Re: Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:29

Salut OTP.

Je serais tenté de dire en ligne de commande.

Ton site est sur un serveur linux ? Si oui, ça peut aller très vite avec les bonnes commandes qui vont bien en root ;)


OTP
Modérateur
Modérateur
 
Messages: 19532
Inscription: 16 Déc 2005

Re: Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:31

Suis sur un mutu OVH 300 gp
Donc linux je pense
Quant à balancer du code en direct, je ne sais pas 1/ si j'ai les droits 2/ si j'en suis capable...


loran750
WRInaute passionné
WRInaute passionné
 
Messages: 2247
Inscription: 15 Mar 2005

Re: Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:32

Hello

Essaye ceci :

Code: Tout sélectionner
<?php
function rrmdir($dir) {
   if (is_dir($dir)) {
     $objects = scandir($dir);
     foreach ($objects as $object) {
       if ($object != "." && $object != "..") {
         if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
       }
     }
     reset($objects);
     rmdir($dir);
   }
}
?>


pioché sur http://www.php.net/manual/fr/function.rmdir.php
A noter que sur cette page, il y a d'autres solutions intéressantes, à tester


OTP
Modérateur
Modérateur
 
Messages: 19532
Inscription: 16 Déc 2005

Re: Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:35

Je vais regarder, merci !


lunicrea
WRInaute impliqué
WRInaute impliqué
 
Messages: 516
Inscription: 30 Aoû 2010

Re: Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:36

Ok bah comme loran750, je te propose un script en php alors :
Code: Tout sélectionner
<?php
/**
* rm() -- Vigorously erase files and directories.
*
* @param $fileglob mixed If string, must be a file name (foo.txt), glob pattern (*.txt), or directory name.
*                        If array, must be an array of file names, glob patterns, or directories.
*/
function rm($fileglob)
{
    if (is_string($fileglob)) {
        if (is_file($fileglob)) {
            return unlink($fileglob);
        } else if (is_dir($fileglob)) {
            $ok = rm("$fileglob/*");
            if (! $ok) {
                return false;
            }
            return rmdir($fileglob);
        } else {
            $matching = glob($fileglob);
            if ($matching === false) {
                trigger_error(sprintf('No files match supplied glob %s', $fileglob), E_USER_WARNING);
                return false;
            }     
            $rcs = array_map('rm', $matching);
            if (in_array(false, $rcs)) {
                return false;
            }
        }     
    } else if (is_array($fileglob)) {
        $rcs = array_map('rm', $fileglob);
        if (in_array(false, $rcs)) {
            return false;
        }
    } else {
        trigger_error('Param #1 must be filename or glob pattern, or array of filenames or glob patterns', E_USER_ERROR);
        return false;
    }

    return true;
}

rm("./ledossierasupprimer");

?>


Sachant que tu peux aussi supprimer un fichier avec ce bout de code ...


loran750
WRInaute passionné
WRInaute passionné
 
Messages: 2247
Inscription: 15 Mar 2005

Re: Vider rapidement un répertoire sur serveur

Message le Jeu Oct 20, 2011 21:45

@lunicrea : j'adore le "Vigorously erase" :) ça c'est du titre de fonction qui dépote !


forty
WRInaute passionné
WRInaute passionné
 
Messages: 1702
Inscription: 30 Oct 2008

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 6:31

Si tu veux que les fichiers ne soient plus accessibles rapidement le mieux c'est sûrement de renommer le répertoire.C'est la seule solution valable que j'ai trouvée pour renouveler mon cache.


lunicrea
WRInaute impliqué
WRInaute impliqué
 
Messages: 516
Inscription: 30 Aoû 2010

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 7:22

loran750 a écrit:@lunicrea : j'adore le "Vigorously erase" :) ça c'est du titre de fonction qui dépote !

héhé, wé c'est ma fonction ERASER ! 8)

ça t'enlève absolument toutes les merdes sur ton ftp. :twisted:


zeb
WRInaute accro
WRInaute accro
 
Messages: 4569
Inscription: 5 Déc 2004

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 8:14

en plus court (et rapide) :

Code: Tout sélectionner
deleteAll($_SERVER['DOCUMENT_ROOT'].'/cache/.../');   
function deleteAll($directory) {
   exec("rm -rf $directory");   
}


note en manipulant la commande "rm" (voir man page) tu peux aussi introduire de la récursivité si necessaire.


spout
WRInaute accro
WRInaute accro
 
Messages: 4383
Inscription: 14 Mai 2003

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 10:36

Code: Tout sélectionner

exec
("rm -rf $directory"); 
 

Avec ça s'il y a trop de fichiers, rm va mettre une erreur "too many arguments" (limitation du kernel).

Il faut donc passer par find + xargs:
Code: Tout sélectionner

exec
("find $directory | xargs rm");
 


OTP
Modérateur
Modérateur
 
Messages: 19532
Inscription: 16 Déc 2005

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 20:12

Merci pour vos réponses.
Je retiens finalement la méthode du renommage de répertoire.
Ensuite, tant pis si mon script prend son temps, ce n'est plus un problème.


lunicrea
WRInaute impliqué
WRInaute impliqué
 
Messages: 516
Inscription: 30 Aoû 2010

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 20:36

OTP a écrit:Je retiens finalement la méthode du renommage de répertoire.

Dammit ! J'ai perdu l'appel d'offres ... :mrgreen:


OTP
Modérateur
Modérateur
 
Messages: 19532
Inscription: 16 Déc 2005

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 20:41

Je retiens juste le plus simple pour mon cas, pas forcément le meilleur pour un cas standard ! ;)


loran750
WRInaute passionné
WRInaute passionné
 
Messages: 2247
Inscription: 15 Mar 2005

Re: Vider rapidement un répertoire sur serveur

Message le Ven Oct 21, 2011 21:10

et les fichiers restants [dans le répertoire renommé] ? Tu les traites plus tard, c'est ça ?

Vider rapidement un répertoire sur serveur

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités