Я работаю над немного новым проектом. Я хотел знать, сколько файлов находится в определенном каталоге.
<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>
Это то, что у меня есть пока (из поиска). Однако это не отображается должным образом? Я добавил несколько заметок, поэтому не стесняйтесь их удалять, они просто для того, чтобы я мог понять это как можно лучше.
Если вам требуется дополнительная информация или вы чувствуете, что я недостаточно описал это, пожалуйста, сообщите об этом.
count(scandir("uploads/")) - 2
чем этот цикл.Ответы:
Вы можете просто сделать следующее:
источник
FilesystemIterator::SKIP_DOTS
любом случае вам не нужно передавать флаг, поскольку он установлен по умолчанию.Вы можете получить количество файлов так:
где
"*"
вы можете изменить это на определенный тип файла, если хотите,"*.jpg"
или вы можете использовать несколько типов файлов, например:то
GLOB_BRACE
флаг расширяется {а, b, c} , чтобы соответствовать 'A', 'B', или 'с'источник
__DIR__ .
before"/path/to/dir/"
(__DIR__ . "/path/to/dir/"
)/path/to/dir
приведет к сбою, потому что первое/
означаетstarting from root dir
. Если былиpath/to/dir
, то да,__DIR__ . '/path/to/dir'
будет помогать (в этом случае вы должны использовать/
после__DIR__
Попробуй это.
Не считая "." и '..'.
источник
$num_files = count($files) - 2;
? Из-за,.
а также..
.
и..
попробуйте следующее: $ files =array_diff( scandir("/dir"), array(".", "..") );
array_slice(scandir($directory),2)
У вас должно быть :
источник
На мой взгляд, лучший ответ:
источник
Поскольку мне это тоже было нужно, мне было любопытно, какая альтернатива была бы самой быстрой.
Я обнаружил, что - если все, что вам нужно - это количество файлов - решение Бабы намного быстрее, чем другие. Я был очень удивлен.
Попробуй сам:
Тестовый прогон: (очевидно,
glob()
точечные файлы не учитываются)источник
Рабочая демонстрация
источник
Я использую это:
источник
array_slice
работает аналогичноsubstr
функции, только с массивами.Например, это будет вырезать первые два ключа массива из массива:
И если вы опустите первый параметр, как в первом примере, массив не будет содержать первых двух пар ключ / значение * ('.' И '..').
источник
Может быть кому-то полезно. В системе Windows вы можете позволить Windows выполнить эту работу, вызвав команду dir. Я использую абсолютный путь, например
E:/mydir/mysubdir
.источник
Это должно работать, войдите в каталог в dirname. и позвольте волшебству случиться.
источник
источник
Основываясь на принятом ответе, вот способ РЕКУРСИВНО подсчитать все файлы в каталоге:
источник
Вот довольно быстрая функция PHP Linux. Немного грязный, но он выполняет свою работу!
$ dir - путь к директории
$ type - f, d или false (по умолчанию)
f - возвращает только количество файлов
d - возвращает только количество папок
false - возвращает общее количество файлов и папок
Вы можете настроить его под свои нужды.
Обратите внимание, что это не будет работать в Windows.
источник
просто добавьте его готово ....
источник