Ответ 1
Вы можете просто сделать следующее:
$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
printf("There were %d Files", iterator_count($fi));
Я работаю над немного новым проектом. Я хотел знать, как сделать так, чтобы он подсчитывал, сколько файлов находится в определенном каталоге.
<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>
Это то, что у меня есть до сих пор (от поиска). Однако он не выглядит правильно? Я добавил несколько заметок, поэтому не стесняйтесь их удалять, они просто так я могу понять это как можно лучше.
Если вам нужна дополнительная информация или я чувствую, как если бы я не описал это достаточно, не стесняйтесь заявить об этом.
Вы можете просто сделать следующее:
$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)
флаг 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)
Я использую это:
count(glob("yourdir/*",GLOB_BRACE))
<?php echo(count(array_slice(scandir($directory),2))); ?>
array_slice
работает аналогично функции substr
, только он работает с массивами.
Например, это приведет к измельчению первых двух ключей массива из массива:
$key_zero_one = array_slice($someArray, 0, 2);
И если вы опустите первый параметр, как в первом примере, массив не будет содержать первые две пары ключ/значение * ('.' и '..').
$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";
}
Это должно работать введите каталог в dirname. и пусть волшебство произойдет.
Может быть, полезно кому-то. В системе Windows вы можете позволить Windows выполнить задание, вызвав команду dir. Я использую абсолютный путь, например E:/mydir/mysubdir
.
<?php
$mydir='E:/mydir/mysubdir';
$dir=str_replace('/','\\',$mydir);
$total = exec('dir '.$dir.' /b/a-d | find /v /c "::"');
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);
просто добавьте его.....