IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Calcul taille de dossier > 20 Go


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut Calcul taille de dossier > 20 Go
    Bonjour,

    Sur mon site j'ai une fonction qui me permet de calculer la taille des dossiers que je lui passe en paramètre.

    Je voudrais savoir quel est le meilleur moyen et le plus rapide de procéder au calcul de gros dossier (jusqu'à 100 Go). La taille varie de 1Go à 100Go

    Aujourd'hui j'utilise la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    		$result = 0;
    		if(!is_dir($path) || !is_readable($path))
    		return 0;
    		$fd = dir($path);
     
    		while($file = $fd->read()){
    			if(($file != ".") && ($file != "..")){
    			if(@is_dir("$path$file/"))
    			$result += $recursive?FolderSize("$path$file/"):0;
    		else
    			$result += filesize("$path$file");
    		}
    		}
     
    		$fd->close();
    		return $result;
    Ne vaut t'il pas mieux passer par une commande SHELL et récupèrer le résultat ??

    Ou, quel est la méthode PHP la plus optimisée possible ?

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Déjà tu devrais utiliser RecursiveDirectoryIterator

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Bonjour stealth35,

    Pourquoi utiliser RecursiveDirectoryIterator par rapport à mon code ?

    RecursiveDirectoryIterator est plus rapide dans les traitements ?


    Donc je dois l'implementer comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function directorySize($directory)
    {
        $size = 0;
        foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file)
        {
            $size += $file->getSize();
        }
        return $size;
    }

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je remarque qu'en se moment stealth35 conseille la SPL à tout ceux qui semblent ce débrouiller. Je serai aussi curieux de savoir si techniquement c'est plus performant que du filesize(), il me semble que l'un comme l'autre doivent passer par le cache php sur les fichiers ...

  5. #5
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Faudrait faire des tests mais il y a peu de chances que cela soit plus performant AMHA.
    Pour la fonction proposée au début du post, il faudrait te passer de la récursivité si tu veux des meilleures perfs.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par gene69 Voir le message
    je remarque qu'en se moment stealth35 conseille la SPL à tout ceux qui semblent ce débrouiller. Je serai aussi curieux de savoir si techniquement c'est plus performant que du filesize(), il me semble que l'un comme l'autre doivent passer par le cache php sur les fichiers ...
    c'est pas tellement le filesize, mais plutôt tout le code autour qui est plus performant et plus simple, plus propre et plus moderne, donc plus facile à maintenir

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Je viens de faire un rapide test sur un répertoire d'environ 92 Mo:

    Mon Script :
    Size : 91584841
    Time : 0.0412 s

    Script RecursiveDirectoryIterator :
    Size : 91629473
    Time : 0.0744 s

    A première vue mon script est plus rapide que l'utilisation de PHP SPL

    Pouvez-vous faire un test vous aussi pour tirer une synthèse ?

  8. #8
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Après tests et une fois le cache généré, la méthode via SPL met 2 fois plus de temps sur ma machine sur un dossier de 8000 fichiers-1.5Go sous Win, que la méthode standard.
    Par contre tu devrais faire tes tests sur des dossiers plus gros/plus de fichiers.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    normalement c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory), RecursiveIteratorIterator::SELF_FIRST);

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Même avec RecursiveIteratorIterator::SELF_FIRST cela ne change pas grand chose

    Je ne suis pas ultra convaincu pour le coup d'utiliser SPL

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par seb-65 Voir le message
    Même avec RecursiveIteratorIterator::SELF_FIRST cela ne change pas grand chose

    Je ne suis pas ultra convaincu pour le coup d'utiliser SPL
    Je préféré un code propre quitte à perdre 0.035s, si tu veux des performances ne fais pas de PHP

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si tu veux des performances ne fais pas de PHP ;)
    Lool un peux hors sujet non là...

    La problématique est simple : quel est le meilleur moyen et le plus rapide sur une fonction calcul de Taille.

    La, en l'occurrence, SPL n'est pas aussi performant que la bonne vielle méthode d'après mes tests.

    Il est vrai que le code SPL est ultra simple 3-4 lignes contre 20 lignes pour la fonction que j'ai écrite.

    Dans mon cas, je ne cherche pas vraiment la lisibilité du code (une fois bien écrit,indenté et commenté il sera lisible pour le commun des utilisateurs PHP), je suis plutôt à la recherche de rapidité d'exécution...

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Le moyen le plus simple : SPL
    Le moyen le plus rapide : ton code

    J'essaye aussi avec COM, mais ... marche pas

  14. #14
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Va pas y avoir un problème de calcul si des fichier sont > à 2Go ? J'avais en tête que php savais pas gérer au dessus (taille d'un int)

  15. #15
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    non parce que PHP doit transtyper.

Discussions similaires

  1. Calcul de taille de dossier
    Par Pelote2012 dans le forum Contribuez
    Réponses: 2
    Dernier message: 23/01/2014, 15h53
  2. Calculer taille d'un string
    Par cotrikkle dans le forum C#
    Réponses: 2
    Dernier message: 31/05/2007, 14h44
  3. [Tableaux] Taille de dossier
    Par Chad11 dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2007, 02h31
  4. contrôler la taille d’un dossier partagé
    Par younek dans le forum Administration
    Réponses: 2
    Dernier message: 18/12/2006, 13h57
  5. calculer taille d'ecran portable
    Par samspitz dans le forum ASP
    Réponses: 4
    Dernier message: 13/10/2006, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo