2013-09-03 2 views
1

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

+1

['count (glob ('folder/*. {Jpg, png, gif}", GLOB_BRACE) '] (http://php.net/manual/de/function.glob.php)? – insertusernamehere

+0

Возможный дубликат [Подсчитать количество файлов в каталоге php] (http://stackoverflow.com/questions/12801370/count-how-many-files-in-directory-php) –

ответ

5

Нет ничего проще: использовать 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() - ->read here
  • FilesystemIterator класс (как ответ DOPS в корректной предложить) --->read here
+0

спасибо, очень – natttan

6

Используйте FilesystemIterator, как показано:

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

Хороший альтернативный метод метод – DonCallisto

+0

+1, да действительно хороший – Pierre

+0

@DonCallisto Я думаю, что этот ответ на stackoverflow был рассмотрен другим аналогичным вопросом, я использовал его с тех пор, и он хорошо работает – dops

0

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

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

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

2

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

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

это копия с комментария «insertusernamehere» – Pierre

+0

@Pierre: Это очень похоже , да. На самом деле я собирался включить некоторую информацию о том, как найти только файлы изображений, пока я не увидел это. Ну, это, и до того, как я понял, что на * nix, globbing по расширению получит iffy.(Например, ОС, зависящие от регистра и/или файловые системы, не собирали бы «what.JPG», например, вам нужно было бы включить каждую комбинацию случая или, по крайней мере, общие). – cHao

1

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

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

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

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