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.

16voto

vbwx Points 83

Comme j'en avais aussi besoin, j'étais curieux de savoir quelle était la solution la plus rapide.

J'ai trouvé que -- si tout ce que vous voulez est un compte de fichier -- la solution de Baba est beaucoup plus rapidement que les autres. J'ai été assez surpris.

Faites-en l'expérience vous-même :

<?php
define('MYDIR', '...');

foreach (array(1, 2, 3) as $i)
{
    $t = microtime(true);
    $count = run($i);
    echo "$i: $count (".(microtime(true) - $t)." s)\n";
}

function run ($n)
{
    $func = "countFiles$n";
    $x = 0;
    for ($f = 0; $f < 5000; $f++)
        $x = $func();
    return $x;
}

function countFiles1 ()
{
    $dir = opendir(MYDIR);
    $c = 0;
    while (($file = readdir($dir)) !== false)
        if (!in_array($file, array('.', '..')))
            $c++;
    closedir($dir);
    return $c;
}

function countFiles2 ()
{
    chdir(MYDIR);
    return count(glob("*"));
}

function countFiles3 () // Fastest method
{
    $f = new FilesystemIterator(MYDIR, FilesystemIterator::SKIP_DOTS);
    return iterator_count($f);
}
?>

Test de fonctionnement : (évidemment, glob() ne compte pas les fichiers point)

1: 99 (0.4815571308136 s)
2: 98 (0.96104407310486 s)
3: 99 (0.26513481140137 s)

12voto

Nirav Ranpara Points 5859

Démonstration de travail

<?php

$directory = "../images/team/harry/"; // dir location
if (glob($directory . "*.*") != false)
{
 $filecount = count(glob($directory . "*.*"));
 echo $filecount;
}
else
{
 echo 0;
}

?>

7voto

J'utilise ceci :

count(glob("yourdir/*",GLOB_BRACE))

3voto

Spooky Points 41
<?php echo(count(array_slice(scandir($directory),2))); ?>

array_slice fonctionne de la même manière que substr mais elle fonctionne avec des tableaux.

Par exemple, cela couperait les deux premières clés du tableau :

$key_zero_one = array_slice($someArray, 0, 2);

Et si vous omettez le premier paramètre, comme dans le premier exemple, le tableau ne contiendra pas les deux premières paires clé/valeur *('.' et '..').

2voto

Panni Points 151

Sur la base de la réponse acceptée, voici un moyen de compter tous les fichiers d'un répertoire de façon RECURSIVE :

iterator_count(
    new \RecursiveIteratorIterator(
        new \RecursiveDirectoryIterator('/your/directory/here/', \FilesystemIterator::SKIP_DOTS)
    )
)

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