Подсчитайте, сколько файлов в каталоге php



Я работаю над немного новым проектом. Я хотел знать, как сделать так, чтобы он подсчитывал, сколько файлов находится в определенном каталоге.



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


Это то, что у меня есть до сих пор (от поиска). Однако он не появляется должным образом? Я добавил несколько заметок, поэтому не стесняйтесь их удалять, они просто так, чтобы я мог понять это как можно лучше.



Если вам требуется дополнительная информация или вы чувствуете, что я недостаточно описал это, пожалуйста, не стесняйтесь заявлять об этом.

722   11  

11 ответов:

вы можете просто сделать следующее :

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

вы можете получить счетчик файлов следующим образом:

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

здесь "*" вы можете изменить это на определенный тип файла, если вы хотите, как "*.jpg" или вы могли бы сделать несколько типов такой:

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

the GLOB_BRACE флаг расширяется {a,b, c}, чтобы соответствовать 'a', 'b' или 'c'

вы должны :

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

попробуйте это.

// Directory
$directory = "/dir";

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

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

Не считая '.' и.' .'.

Рабочая Демо

<?php

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

?>

Так как мне это тоже было нужно, мне было любопытно, какая альтернатива была самой быстрой.

я обнаружил, что-если все, что вам нужно, это количество файлов - решение бабы большое быстрее, чем другие. Я был очень удивлен.

попробовать его для себя:

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

тест: (очевидно, glob() не считает dot-файлы)

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

Я использую этот:

count(glob("yourdir/*",GLOB_BRACE))
<?php echo(count(array_slice(scandir($directory),2))); ?>

array_slice работает аналогично как substr функция, только она работает с массивами.

например, это будет вырезать первые два ключа массива из массива:

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

и если опустить первый параметр, как и в первом примере, массив не будет содержать первые две пары ключ/значение *('.' и.' .').

может быть полезным для кого-то. В системе Windows вы можете разрешить Windows выполнять эту работу, вызвав команду dir-command. Я использую абсолютный путь, например E:/mydir/mysubdir.

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

Это должно работать введите каталог, в каталог. и пусть случится волшебство.

  simple code add for file .php then your folder which number of file to count its      

    $directory = "images/icons";
    $files = scandir($directory);
    for($i = 0 ; $i < count($files) ; $i++){
        if($files[$i] !='.' && $files[$i] !='..')
        { echo $files[$i]; echo "<br>";
            $file_new[] = $files[$i];
        }
    }
    echo $num_files = count($file_new);

просто добавить его сделали ....

Comments

    Ничего не найдено.