126

私は少し新しいプロジェクトに取り組んでいます。特定のディレクトリにあるファイルの数を知りたいと思いました。

<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>

これは私がこれまでに持っているものです(検索から)。しかし、正しく表示されていませんか?私はいくつかのメモを追加したので、それらを自由に削除してください。それらは私ができる限りそれを最もよく理解できるようにするためのものです。

さらに詳しい情報が必要な場合、または私がこれについて十分に説明していないように感じる場合は、遠慮なくそのように述べてください。

4

15 に答える 15

292

次の操作を簡単に実行できます。

$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
printf("There were %d Files", iterator_count($fi));
于 2012-10-09T14:01:21.843 に答える
79

次のようにファイル数を取得できます。

$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)

フラグは {a,b,c} を展開してGLOB_BRACE、'a'、'b'、または 'c' に一致させます。

于 2012-10-09T13:44:02.883 に答える
48

Try this.

// 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);
于 2012-10-09T13:41:41.720 に答える
42

あなたが持っている必要があります:

<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>
于 2012-10-09T13:42:05.957 に答える
15

私もこれが必要だったので、どの代替案が最も速いか興味がありました.

ファイル数だけが必要な場合は、ババのソリューションが他のソリューションよりもはるかに高速であることがわかりました。私はかなり驚きました。

自分で試してみてください:

<?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)
于 2013-10-22T09:29:45.957 に答える
12

ワーキングデモ

<?php

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

?>
于 2012-10-09T13:46:17.430 に答える
2
<?php echo(count(array_slice(scandir($directory),2))); ?>

array_slice関数と同様にsubstr機能しますが、配列でのみ機能します。

たとえば、これは配列から最初の 2 つの配列キーを切り取ります。

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

また、最初の例のように最初のパラメーターを省略した場合、配列には最初の 2 つのキーと値のペア *('.' と '..') が含まれません。

于 2016-04-09T21:52:37.047 に答える
-2
  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);

簡単な追加が完了しました....

于 2015-01-02T13:37:53.907 に答える