Как посчитать количество файлов в папке в php?

Я хочу, чтобы пользователи могли загружать некоторые файлы (изображения) в свои собственные папки. Но это должно быть возможно только в том случае, если эти папки содержат менее пяти изображений. Если уже есть 5 изображений, скрипт должен сообщить пользователю, что его папка заполнена. Итак, мне интересно, есть ли в php функция, которая подсчитывает количество файлов в папке. Или любым другим способом в PHP сделать это? Заранее спасибо.

6 ответов

Использовать FilesystemIterator как показано:

$dir = "/path/to/folder";
$fi = new FilesystemIterator($dir, FilesystemIterator::SKIP_DOTS);
$fileCount = iterator_count($fi);

Нет ничего проще: используйте opendir() а также readdir() просто как следовать:

<?php

$images_extension_array = array("jpg","jpeg","gif","png");

$dir = "/path/to/user/folder";
$dir_resource = opendir($dir);

$file_count = 0;
while (($file = readdir($dir_resource)) !== false) { // scan directory
  $extension_from = strrpos($file,"."); // isolate extension index/offset
  if ($extension_from && in_array(substr($file,$extension_from+1), $images_extension_array))
    $file_count ++; //if has extension and that extension is "associated" with an image, count
}
if ($number_of_files == %) {
  //do stuff
}

Очевидно, это не учитывает расширения файлов...


Вы также можете использовать:

Мне действительно нравится dops answer, но он возвращает количество файлов, каталогов и символических ссылок, что может и не быть целью. Если вы просто хотите подсчитать количество локальных файлов в каталоге, вы можете использовать:

$path = "/path/to/folder";
$fs = new FilesystemIterator($path);
foreach($fs as $file) {
   $file->isFile() ?  ++$filecount : $filecount;
}

Вы можете просто позволить PHP найти файлы для вас... а затем посчитать их.

$count = count(glob("$path_to_user_dir/*"));

Эта небольшая функция здесь является модификацией некоторого кода, который я нашел недавно, который также будет подсчитывать все подпапки и все в этих папках:

<?PHP


$folderCount = $fileCount = 0;

countStuff('.', $fileCount, $folderCount);

function countStuff($handle, &$fileCount, &$folderCount)
{
    if ($handle = opendir($handle)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                if (is_dir($entry)) {
                    echo "Folder => " . $entry . "<br>";
                    countStuff($entry, $fileCount, $folderCount);
                    $folderCount++;
                } else {
                    echo "File   => " . $entry . "<br>";
                    $fileCount++;
                }
            }
        }
        closedir($handle);
    }
}
echo "<br>==============<br>";
echo "Total Folder Count : " . $folderCount . "<br>";
echo "Total File Count : " . $fileCount;

?>

ПРИМЕЧАНИЕ: я также опубликую исходный код, который будет просто подсчитывать файлы и папки родительского каталога, а не дочерние подпапки ниже:

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            if (is_dir($entry)) {
                echo "Folder => " . $entry . "<br>";
                countStuff($entry, $fileCount, $folderCount);
                $folderCount++;
            } else {
                echo "File   => " . $entry . "<br>";
                $fileCount++;
            }
        }
    }
    echo "<br>==============<br>";
    echo "Total Folder Count : " . $folderCount . "<br>";
    echo "Total File Count : " . $fileCount;
    closedir($handle);
}

Ты можешь использовать

$nbFiles=count(scandir('myDirectory'))-2;

(-2 для удаления "." И "..")

Другие вопросы по тегам