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>
이것이 내가 지금까지 (검색에서) 가진 것입니다. 그러나 제대로 나타나지 않습니까? 몇 가지 메모를 추가 했으므로 자유롭게 제거 할 수 있습니다. 가능한 한 최대한 이해할 수 있도록합니다.
더 많은 정보가 필요하거나이 내용을 충분히 설명하지 않은 것 같다면 언제든지 말씀해주십시오.
다음을 수행 할 수 있습니다.
$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;
Not counting the '.' and '..'.
Working Demo
<?php
$directory = "../images/team/harry/"; // dir location
if (glob($directory . "*.*") != false)
{
$filecount = count(glob($directory . "*.*"));
echo $filecount;
}
else
{
echo 0;
}
?>
Since I needed this too, I was curious as to which alternative was the fastest.
I found that -- if all you want is a file count -- Baba's solution is a lot faster than the others. I was quite surprised.
Try it out for yourself:
<?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);
}
?>
Test run: (obviously, glob()
doesn't count dot-files)
1: 99 (0.4815571308136 s)
2: 98 (0.96104407310486 s)
3: 99 (0.26513481140137 s)
The best answer in my opinion:
$num = count(glob("/exact/path/to/files/" . "*"));
echo $num;
- It doesnt counts . and ..
- Its a one liner
- Im proud of it
I use this:
count(glob("yourdir/*",GLOB_BRACE))
<?php echo(count(array_slice(scandir($directory),2))); ?>
array_slice
works similary like substr
function, only it works with arrays.
For example, this would chop out first two array keys from array:
$key_zero_one = array_slice($someArray, 0, 2);
And if You ommit the first parameter, like in first example, array will not contain first two key/value pairs *('.' and '..').
Maybe usefull to someone. On a Windows system, you can let Windows do the job by calling the dir-command. I use an absolute path, like 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";
}
This should work enter the directory in dirname. and let the magic happen.
$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;
Based on the accepted answer, here is a way to count all files in a directory RECURSIVELY:
iterator_count(
new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator('/your/directory/here/', \FilesystemIterator::SKIP_DOTS)
)
)
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);
simple add its done ....
참고URL : https://stackoverflow.com/questions/12801370/count-how-many-files-in-directory-php
'programing tip' 카테고리의 다른 글
rails i18n-내부 링크가있는 텍스트 번역 (0) | 2020.09.01 |
---|---|
JavaScript를 사용하여 페이지의 메타 태그를 변경할 수 있습니까? (0) | 2020.08.31 |
C # 대 C-큰 성능 차이 (0) | 2020.08.31 |
웹 서버에서 디버깅을 시작할 수 없습니다. (0) | 2020.08.31 |
Genia Corpus로 Stanford Parser를 훈련시키는 방법은 무엇입니까? (0) | 2020.08.31 |