计算目录 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>

这就是我到目前为止(从寻找)所得到的。然而,它是不是出现正确?我已经添加了一些注释,所以请随意删除他们,他们只是让我能够理解它作为最好的,我可以。

如果您需要一些更多的信息或感觉好像我没有描述这一点足够,请随意陈述如此。

201167 次浏览

试试这个。

// Directory
$directory = "/dir";


// Returns an array of files
$files = scandir($directory);


// Count the number of files and store them inside the variable..
// Removing 2 because we do not count '.' and '..'.
$num_files = count($files)-2;

你应该:

<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 = "/path/to/dir/";
$filecount = count(glob($directory . "*"));
echo "There were $filecount files";

其中的 "*"是你可以改变它到一个特定的文件类型,如果你想像 "*.jpg"或者你可以做多个文件类型像这样:

glob($directory . "*.{jpg,png,gif}",GLOB_BRACE)

GLOB_BRACE标志展开{ a,b,c }以匹配‘ a’、‘ b’或‘ c’

注意: glob()跳过 Linux 隐藏文件,或者所有名称以点开头的文件,即 .htaccess

工作演示

<?php


$directory = "../images/team/harry/"; // dir location
if (glob($directory . "*.*") != false)
{
$filecount = count(glob($directory . "*.*"));
echo $filecount;
}
else
{
echo 0;
}


?>

你可以简单地做到以下几点:

$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
printf("There were %d Files", iterator_count($fi));

因为我也需要这个,所以我很好奇哪个选择是最快的。

我发现——如果你想要的只是一个文件计数—— Baba 的解决方案是 很多比其他解决方案更快。我很惊讶。

你自己试试看:

<?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()不计算点文件)

1: 99 (0.4815571308136 s)
2: 98 (0.96104407310486 s)
3: 99 (0.26513481140137 s)

我用这个:

count(glob("yourdir/*",GLOB_BRACE))
  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);

简单的添加它的完成... 。

$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 中输入目录,然后让奇迹发生。

<?php echo(count(array_slice(scandir($directory),2))); ?>

array_slice的工作原理与 substr函数类似,只是它适用于数组。

例如,这将从 array 中删除前两个数组键:

$key_zero_one = array_slice($someArray, 0, 2);

如果省略第一个参数,像第一个例子一样,array 将不包含前两个键/值对 * (’)还有。.').

也许对某人有用。在 Windows 系统上,可以通过调用 dir-command 让 Windows 完成这项工作。我使用绝对路径,比如 E:/mydir/mysubdir

<?php
$mydir='E:/mydir/mysubdir';
$dir=str_replace('/','\\',$mydir);
$total = exec('dir '.$dir.' /b/a-d | find /v /c "::"');
$files = glob('uploads/*');
$count = 0;
$totalCount = 0;
$subFileCount = 0;
foreach ($files as $file)
{
global $count, $totalCount;
if(is_dir($file))
{
$totalCount += getFileCount($file);
}
if(is_file($file))
{
$count++;
}
}


function getFileCount($dir)
{
global $subFileCount;
if(is_dir($dir))
{
$subfiles = glob($dir.'/*');
if(count($subfiles))
{
foreach ($subfiles as $file)
{
getFileCount($file);
}
}
}
if(is_file($dir))
{
$subFileCount++;
}
return $subFileCount;
}


$totalFilesCount = $count + $totalCount;
echo 'Total Files Count ' . $totalFilesCount;

根据已接受的答案,这里有一种方法来计算目录 RECURSIVELY 中的所有文件:

iterator_count(
new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator('/your/directory/here/', \FilesystemIterator::SKIP_DOTS)
)
)

我认为最好的答案是:

$num = count(glob("/exact/path/to/files/" . "*"));
echo $num;
  • 这不算,而且..。
  • 这只是一句话
  • 我为此感到骄傲

这是一个相当快的 PHP Linux 函数。有点脏,但它可以完成任务!

$dir-path 到目录

$type-f、 d 或 false (默认情况下)

F-只返回文件计数

D-只返回文件夹计数

False-返回总文件和文件夹计数

function folderfiles($dir, $type=false) {
$f = escapeshellarg($dir);
if($type == 'f') {
$io = popen ( '/usr/bin/find ' . $f . ' -type f | wc -l', 'r' );
} elseif($type == 'd') {
$io = popen ( '/usr/bin/find ' . $f . ' -type d | wc -l', 'r' );
} else {
$io = popen ( '/usr/bin/find ' . $f . ' | wc -l', 'r' );
}


$size = fgets ( $io, 4096);
pclose ( $io );
return $size;
}

您可以根据需要进行调整。

请注意,这在 Windows 上不起作用。