6
votes

Je veux obtenir la somme de la taille des fichiers dans le dossier par PHP

J'ai un dossier nommé fichiers , comment puis-je déterminer la somme de la taille de ses fichiers?

php

4 Réponses :


9
votes
echo array_sum(array_map('filesize', glob('*')));

3 commentaires

Cela n'exclut pas les annuaires, n'est-ce pas? C'est aussi inefficace. D'abord, vous Glob Les noms de fichiers, puis vous les remplacez de leur taille, puis vous les résumez. C'est deux itérations supplémentaires sur la matrice initiale lorsque vous pourriez tout faire dans une seule itération.


De plus, vous pouvez ajouter glob_nosort lorsque vous ne vous souciez pas de la commande de fichier de toute façon. Voir Phparch.com/2010/04/28/ Mettre-glob-to-the-test - qui devrait ajouter une certaine vitesse à GLOB. Toujours pas optimal cependant.


Array_Reduce (GLOD ('? *. ou un dérivé est beaucoup plus jolie.



20
votes

avec répertoire et splfileinfo xxx pré>

et au cas où vous avez besoin de sous-dossiers: P>

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('/path/to/dir')
);

$totalSize = 0;
foreach ($iterator as $file) {
    $totalSize += $file->getSize();
}
echo $totalSize;


1 commentaires

Réponse wwasome :) L'utilisation de cela est si facile. Merci d'avoir répondu



4
votes

Essayez-le en utilisant FileSize () Pour calculer la taille du fichier en itérant à tous les fichiers et fichiers sous-répertoires.

<?php
function get_dir_size($dir_name){
    $dir_size =0;
    if (is_dir($dir_name)) {
        if ($dh = opendir($dir_name)) {
           while (($file = readdir($dh)) !== false) {
              if($file !=”.” && $file != “..”){
                  if(is_file($dir_name.”/”.$file)){
                      $dir_size += filesize($dir_name.”/”.$file);
                  }
                 /* check for any new directory inside this directory */
                 if(is_dir($dir_name.”/”.$file)){
                     $dir_size +=  get_dir_size($dir_name.”/”.$file);
                  }
               }
           }
        }
    }
closedir($dh);
return $dir_size;
}

$dir_name = “directory name here”;
/* 1048576 bytes == 1MB */
$total_size= round((get_dir_size($dir_name) / 1048576),2) ;
print “Directory $dir_name size : $total_size MB”;
?>


0 commentaires

0
votes

Si vous avez accès à la fonction Exec, vous pouvez utiliser ce code:

exec("du /home/ -s 2>&1",$output);
echo intval($output[0]) ;


1 commentaires

Veuillez ne pas recommander l'utilisation de EXEC () , en particulier lorsqu'il implique tout type d'entrée variable fournie par l'utilisateur. Cela ouvre juste la possibilité pour les injections de commandes Shell et toutes ses implications liées à la sécurité, et personne ne le souhaite vraiment. Cependant, si cela ne peut pas être évité, au moins pointez sur EscapeShellarg () ou Une autre solution pour assainir la saisie de l'utilisateur avant de passer à EXEC () .