Подсчитайте, сколько файлов в каталоге php
Я работаю над немного новым проектом. Я хотел знать, как сделать так, чтобы он подсчитывал, сколько файлов находится в определенном каталоге.
<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>
Это то, что у меня есть до сих пор (от поиска). Однако он не появляется должным образом? Я добавил несколько заметок, поэтому не стесняйтесь их удалять, они просто так, чтобы я мог понять это как можно лучше.
Если вам требуется дополнительная информация или вы чувствуете, что я недостаточно описал это, пожалуйста, не стесняйтесь заявлять об этом.
11 ответов:
вы можете просто сделать следующее :
$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS); printf("There were %d Files", iterator_count($fi));
вы можете получить счетчик файлов следующим образом:
$directory = "/path/to/dir/"; $filecount = 0; $files = glob($directory . "*"); if ($files){ $filecount = count($files); } echo "There were $filecount files";здесь
"*"вы можете изменить это на определенный тип файла, если вы хотите, как"*.jpg"или вы могли бы сделать несколько типов такой:glob($directory . "*.{jpg,png,gif}",GLOB_BRACE)the
GLOB_BRACEфлаг расширяется {a,b, c}, чтобы соответствовать 'a', 'b' или 'c'
вы должны :
<div id="header"> <?php // integer starts at 0 before counting $i = 0; $dir = 'uploads/'; if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false){ if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) $i++; } } // prints out how many were in the directory echo "There were $i files"; ?> </div>
попробуйте это.
// Directory $directory = "/dir"; // Returns array of files $files = scandir($directory); // Count number of files and store them to variable.. $num_files = count($files)-2;Не считая '.' и.' .'.
Рабочая Демо
<?php $directory = "../images/team/harry/"; // dir location if (glob($directory . "*.*") != false) { $filecount = count(glob($directory . "*.*")); echo $filecount; } else { echo 0; } ?>
Так как мне это тоже было нужно, мне было любопытно, какая альтернатива была самой быстрой.
я обнаружил, что-если все, что вам нужно, это количество файлов - решение бабы большое быстрее, чем другие. Я был очень удивлен.
попробовать его для себя:
<?php define('MYDIR', '...'); foreach (array(1, 2, 3) as $i) { $t = microtime(true); $count = run($i); echo "$i: $count (".(microtime(true) - $t)." s)\n"; } function run ($n) { $func = "countFiles$n"; $x = 0; for ($f = 0; $f < 5000; $f++) $x = $func(); return $x; } function countFiles1 () { $dir = opendir(MYDIR); $c = 0; while (($file = readdir($dir)) !== false) if (!in_array($file, array('.', '..'))) $c++; closedir($dir); return $c; } function countFiles2 () { chdir(MYDIR); return count(glob("*")); } function countFiles3 () // Fastest method { $f = new FilesystemIterator(MYDIR, FilesystemIterator::SKIP_DOTS); return iterator_count($f); } ?>тест: (очевидно,
glob()не считает dot-файлы)1: 99 (0.4815571308136 s) 2: 98 (0.96104407310486 s) 3: 99 (0.26513481140137 s)
<?php echo(count(array_slice(scandir($directory),2))); ?>
array_sliceработает аналогично какsubstrфункция, только она работает с массивами.например, это будет вырезать первые два ключа массива из массива:
$key_zero_one = array_slice($someArray, 0, 2);и если опустить первый параметр, как и в первом примере, массив не будет содержать первые две пары ключ/значение *('.' и.' .').
может быть полезным для кого-то. В системе Windows вы можете разрешить Windows выполнять эту работу, вызвав команду dir-command. Я использую абсолютный путь, например
E:/mydir/mysubdir.<?php $mydir='E:/mydir/mysubdir'; $dir=str_replace('/','\',$mydir); $total = exec('dir '.$dir.' /b/a-d | find /v /c "::"');
$it = new filesystemiterator(dirname("Enter directory here")); printf("There were %d Files", iterator_count($it)); echo("<br/>"); foreach ($it as $fileinfo) { echo $fileinfo->getFilename() . "<br/>\n"; }Это должно работать введите каталог, в каталог. и пусть случится волшебство.
simple code add for file .php then your folder which number of file to count its $directory = "images/icons"; $files = scandir($directory); for($i = 0 ; $i < count($files) ; $i++){ if($files[$i] !='.' && $files[$i] !='..') { echo $files[$i]; echo "<br>"; $file_new[] = $files[$i]; } } echo $num_files = count($file_new);просто добавить его сделали ....
Comments