Как посчитать количество файлов в папке в 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
}
Очевидно, это не учитывает расширения файлов...
Вы также можете использовать:
scandir()
---> читать здесьFilesystemIterator
класс (как правильно подсказывает ответ допса) ---> читайте здесь
Мне действительно нравится 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 для удаления "." И "..")