una - scandir php




Cuenta cuántos archivos en el directorio php (8)

Como yo también necesitaba esto, tenía curiosidad sobre cuál alternativa era la más rápida.

Descubrí que, si lo único que quieres es un conteo de archivos, la solución de Baba es mucho más rápida que las demás. Estaba bastante sorprendido.

Pruébelo usted mismo:

<?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);
}
?>

Prueba de ejecución: (obviamente, glob() no cuenta los archivos de puntos)

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

Estoy trabajando en un proyecto un poco nuevo. Quería saber cómo hacerlo, así que cuenta cuántos archivos hay en un directorio determinado.

<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>

Esto es lo que tengo hasta ahora (de la búsqueda). Sin embargo, no está apareciendo correctamente? He agregado algunas notas, así que siéntete libre de eliminarlas, solo para que pueda entenderlas lo mejor que pueda.

Si necesita más información o si siente que no describí esto lo suficiente, no dude en decirlo.


Deberías :

<div id="header">
<?php 
    // integer starts at 0 before counting
    $i = 0; 
    $dir = 'uploads/';
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle)) !== false){
            if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) 
                $i++;
        }
    }
    // prints out how many were in the directory
    echo "There were $i files";
?>
</div>

Prueba esto.

// Directory
$directory = "/dir";

// Returns array of files
$files = scandir($directory);

// Count number of files and store them to variable..
$num_files = count($files)-2;

Sin contar el '.' y '..'.


Puedes obtener el conteo de archivos así:

$directory = "/path/to/dir/";
$filecount = 0;
$files = glob($directory . "*");
if ($files){
 $filecount = count($files);
}
echo "There were $filecount files";

donde el "*" es que puedes cambiar eso a un tipo de archivo específico si quieres "*.jpg" o puedes hacer múltiples tipos de archivos como este:

glob($directory . "*.{jpg,png,gif}",GLOB_BRACE)

la bandera GLOB_BRACE expande {a, b, c} para que coincida con 'a', 'b' o 'c'


Simplemente puede hacer lo siguiente:

$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
printf("There were %d Files", iterator_count($fi));

Yo uso esto:

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

$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";
    } 

Esto debería funcionar para ingresar al directorio en dirname. y deja que la magia suceda


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

array_slice funciona de forma similar a la función substr , solo que funciona con matrices.

Por ejemplo, esto cortaría las primeras dos teclas de matriz de la matriz:

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

Y si omite el primer parámetro, como en el primer ejemplo, la matriz no contendrá los dos primeros pares clave / valor * ('.' Y '..').





directory