Я хочу, чтобы пользователи могли загружать файлы (картинки) в свои собственные папки. Но это должно быть возможно только в том случае, если эти папки содержат менее пяти изображений. Если уже есть 5 картин, скрипт должен сообщить пользователю, что его/ее папка заполнена. Итак, интересно, есть ли в php функция, которая подсчитывает количество файлов в папке. Или любой другой способ в php сделать это? Заранее спасибо.Как подсчитать количество файлов в папке в php?
ответ
Нет ничего проще: использовать 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
}
Очевидно, что это не принимает во расширений файлов счета ...
Вы также можете использовать:
спасибо, очень – natttan
Используйте FilesystemIterator
, как показано:
$dir = "/path/to/folder";
$fi = new FilesystemIterator($dir, FilesystemIterator::SKIP_DOTS);
$fileCount = iterator_count($fi);
Хороший альтернативный метод метод – DonCallisto
+1, да действительно хороший – Pierre
@DonCallisto Я думаю, что этот ответ на stackoverflow был рассмотрен другим аналогичным вопросом, я использовал его с тех пор, и он хорошо работает – dops
Вы можете использовать
$nbFiles=count(scandir('myDirectory'))-2;
(-2 для удаления "." И "..")
Вы можете просто позволить PHP найти файлы для вас ... затем посчитайте их.
$count = count(glob("$path_to_user_dir/*"));
это копия с комментария «insertusernamehere» – Pierre
@Pierre: Это очень похоже , да. На самом деле я собирался включить некоторую информацию о том, как найти только файлы изображений, пока я не увидел это. Ну, это, и до того, как я понял, что на * nix, globbing по расширению получит iffy.(Например, ОС, зависящие от регистра и/или файловые системы, не собирали бы «what.JPG», например, вам нужно было бы включить каждую комбинацию случая или, по крайней мере, общие). – cHao
Мне очень нравится DOPS ответ, но он возвращает количество файлов, каталогов и символические ссылки, которые не могут быть целью. Если вы просто хотите, подсчет локальных файлов в каталоге, вы можете использовать:
$path = "/path/to/folder";
$fs = new FilesystemIterator($path);
foreach($fs as $file) {
$file->isFile() ? ++$filecount : $filecount;
}
Эта маленькая функция здесь является модификацией в какой-то код, который я нашел некоторое время назад, что также будет учитываться все вложенные папки и все в этих папках, а также:
<?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);
}
['count (glob ('folder/*. {Jpg, png, gif}", GLOB_BRACE) '] (http://php.net/manual/de/function.glob.php)? – insertusernamehere
Возможный дубликат [Подсчитать количество файлов в каталоге php] (http://stackoverflow.com/questions/12801370/count-how-many-files-in-directory-php) –