0

PHPを使用してフォルダー内のファイル数をカウントする次のコードがあります

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  $x++;
}

ただし、フォルダーが空の場合でも、3 つのファイルが表示され、フォルダーに 8 つのファイルがある場合は 11 のファイルが表示されます。

誰かがこれを説明できれば、私は非常に感謝しています..ありがとう。

4

2 に答える 2

2

通常のファイルのみをカウントする場合:

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  if ($file->isFile()) $x++; 
}

または、ディレクトリをスキップする場合:

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  if (!$file->isDir()) $x++; 
}

またはドットファイルをスキップしたい場合:

$x=0;
$filepath=$uplaod_drive."Workspace/12345";
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
  if (!$file->isDot()) $x++; 
}
于 2013-07-27T21:06:54.560 に答える
0

DirectoryIterator は、現在のディレクトリ ('.' で示される) と以前のディレクトリ ('..' で示される) を $files としてカウントしています。そのようにコードをデバッグします。

$x=0;
$filepath='C:\xampp\htdocs\\';
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
    echo $file . "<br/>";
  $x++;
}
echo $x;

次に、@Prix による上記のコメントで述べたように、$file->isDot() の場合はスキップできます。ディレクトリをカウントしたくない場合は、$file->isFile() でない場合もスキップできます。

$x=0;
$filepath='C:\xampp\htdocs\\';
$dir = new DirectoryIterator($filepath);
foreach($dir as $file ){
    if ($file->isDot() || !$file->isFile()) continue;
    //echo $file . "<br/>";
  $x++;
}
echo $x;
于 2013-07-27T21:06:22.253 に答える