126 votes

Comptez le nombre de fichiers dans le répertoire PHP

Je travaille sur un projet un peu nouveau. Je voulais savoir combien de fichiers se trouvent dans un certain répertoire.

<div id="header">
<?php 
    $dir = opendir('uploads/'); # This is the directory it will count from
    $i = 0; # Integer starts at 0 before counting

    # While false is not equal to the filedirectory
    while (false !== ($file = readdir($dir))) { 
        if (!in_array($file, array('.', '..') and !is_dir($file)) $i++;
    }

    echo "There were $i files"; # Prints out how many were in the directory
?>
</div>

Voici ce que j'ai trouvé jusqu'à présent (en cherchant). Cependant, il ne s'affiche pas correctement ? J'ai ajouté quelques notes, alors n'hésitez pas à les supprimer, elles sont juste là pour me permettre de comprendre au mieux.

Si vous avez besoin de plus d'informations ou si vous avez l'impression que je n'ai pas assez décrit la situation, n'hésitez pas à me le dire.

1voto

oussama Points 11
$it = new filesystemiterator(dirname("Enter directory here"));
printf("There were %d Files", iterator_count($it));
echo("<br/>");
    foreach ($it as $fileinfo) {
        echo $fileinfo->getFilename() . "<br/>\n";
    } 

Cela devrait fonctionner entrez le répertoire dans dirname. et laissez la magie opérer.

1voto

Michel Points 767

Peut-être utile à quelqu'un. Sur un système Windows, vous pouvez laisser Windows faire le travail en appelant la commande dir. J'utilise un chemin absolu, comme E:/mydir/mysubdir .

<?php 
$mydir='E:/mydir/mysubdir';
$dir=str_replace('/','\\',$mydir);
$total = exec('dir '.$dir.' /b/a-d | find /v /c "::"');

1voto

user3121984 Points 11
$files = glob('uploads/*');
$count = 0;
$totalCount = 0;
$subFileCount = 0;
foreach ($files as $file) 
{  
    global $count, $totalCount;
    if(is_dir($file))
    {
        $totalCount += getFileCount($file);
    }
    if(is_file($file))
    {
        $count++;  
    }  
}

function getFileCount($dir)
{
    global $subFileCount;
    if(is_dir($dir))
    {
        $subfiles = glob($dir.'/*');
        if(count($subfiles))
        {      
            foreach ($subfiles as $file) 
            {
                getFileCount($file);
            }
        }
    }
    if(is_file($dir))
    {
        $subFileCount++;
    }
    return $subFileCount;
}

$totalFilesCount = $count + $totalCount; 
echo 'Total Files Count ' . $totalFilesCount;

1voto

GTodorov Points 1487

Voici une fonction PHP Linux qui est considérablement rapide. Un peu sale, mais elle fait le travail !

$dir - chemin d'accès au répertoire

$type - f, d ou false (par défaut)

f - renvoie uniquement le nombre de fichiers

d - renvoie uniquement le nombre de dossiers

false - renvoie le nombre total de fichiers et de dossiers

function folderfiles($dir, $type=false) {
    $f = escapeshellarg($dir);
    if($type == 'f') {
        $io = popen ( '/usr/bin/find ' . $f . ' -type f | wc -l', 'r' );
    } elseif($type == 'd') {
        $io = popen ( '/usr/bin/find ' . $f . ' -type d | wc -l', 'r' );
    } else {
        $io = popen ( '/usr/bin/find ' . $f . ' | wc -l', 'r' );
    }

    $size = fgets ( $io, 4096);
    pclose ( $io );
    return $size;
}

Vous pouvez l'adapter à vos besoins.

Veuillez noter que cela ne fonctionnera pas sous Windows.

0voto

Joey Rich Points 31

La réponse recommandée contient une erreur qui est très difficile à déboguer en PHP car il s'agit d'une erreur d'analyse. Elle contient une parenthèse manquante dans la boucle while.
Il devrait l'être :

si (!in_array($file, array('.', '..')) && !is_dir($file)) $i++ ;

Je poste ici car je n'ai pas assez de réputation pour répondre à la réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X