计算目录php中有多less个文件
我正在做一个稍微新的项目。 我想知道如何使它成为一个特定目录中有多less个文件。
<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>
这是我迄今为止(从search)。 但它不正确显示? 我已经添加了几个笔记,所以随时删除它们,他们只是这样我可以尽我所能地理解它。
如果您需要更多的信息或感觉好像我没有足够的描述,请随时声明。
您可以简单地执行以下操作:
$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS); printf("There were %d Files", iterator_count($fi));
你可以像这样获得filecount:
$directory = "/path/to/dir/"; $filecount = 0; $files = glob($directory . "*"); if ($files){ $filecount = count($files); } echo "There were $filecount files";
如果你想像"*.jpg"
那样你可以把它改成一个特定的文件types,或者你可以像这样做多个文件types:
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 = "..http://img.dovov.comteam/harry/"; // dir location if (glob($directory . "*.*") != false) { $filecount = count(glob($directory . "*.*")); echo $filecount; } else { echo 0; } ?>
由于我也需要这个,所以我很好奇哪种方法是最快的。
我发现 – 如果你想要的只是一个文件数 – 爸爸的解决scheme比其他人快得多。 我很惊讶。
自己尝试一下:
<?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); } ?>
testing运行:(显然, glob()
不计算点文件)
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);
如果你省略了第一个参数,就像在第一个例子中一样,array不会包含前两个键/值对*('。'和'..')。
$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-command来完成这项工作。 我使用绝对path,如E:/mydir/mysubdir
。
<?php $mydir='E:/mydir/mysubdir'; $dir=str_replace('/','\\',$mydir); $total = exec('dir '.$dir.' /b/ad | 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);
简单地添加它的完成….