如何计算php中文件夹中的文件数?

时间:2013-09-03 13:31:13

标签: php directory

我想让用户在自己的文件夹中上传一些文件(图片)。但是,只有当文件夹包含的图片少于五张时才应该这样。如果已经有5张图片,脚本必须让用户知道他/她的文件夹已满。  所以,我想知道php中是否有函数来计算文件夹中的文件数量。或者在PHP中的任何其他方式来做到这一点?提前致谢。

6 个答案:

答案 0 :(得分:8)

使用FilesystemIterator,如下所示:

$dir = "/path/to/folder";
$fi = new FilesystemIterator($dir, FilesystemIterator::SKIP_DOTS);
$fileCount = iterator_count($fi);

答案 1 :(得分:6)

更轻松:使用opendir()readdir(),如下所示:

<?php

$images_extension_array = array("jpg","jpeg","gif","png");

$dir = "/path/to/user/folder";
$dir_resource = opendir($dir);

$file_count = 0;
while (($file = readdir($dir_resource)) !== false) { // scan directory
  $extension_from = strrpos($file,"."); // isolate extension index/offset
  if ($extension_from && in_array(substr($file,$extension_from+1), $images_extension_array))
    $file_count ++; //if has extension and that extension is "associated" with an image, count
}
if ($number_of_files == %) {
  //do stuff
}

显然,这并没有考虑到文件扩展名......


您也可以使用:

  • scandir() ---&gt; read here
  • FilesystemIterator课程(正如dops的答案正确建议的那样)---&gt; read here

答案 2 :(得分:2)

你可以让PHP为你找到这些文件......然后计算它们。

$count = count(glob("$path_to_user_dir/*"));

答案 3 :(得分:1)

我真的很喜欢dops的答案,但它会返回文件,目录和符号链接的数量,这可能不是目标。如果您只想计算目录中的本地文件,可以使用:

$path = "/path/to/folder";
$fs = new FilesystemIterator($path);
foreach($fs as $file) {
   $file->isFile() ?  ++$filecount : $filecount;
}

答案 4 :(得分:0)

您可以使用

$nbFiles=count(scandir('myDirectory'))-2;

( - 2用于删除“。”和“..”)

答案 5 :(得分:0)

这里的这个小功能是对我前面发现的一些代码的修改,它们也将计算所有子文件夹以及这些文件夹中的所有内容:

<?PHP


$folderCount = $fileCount = 0;

countStuff('.', $fileCount, $folderCount);

function countStuff($handle, &$fileCount, &$folderCount)
{
    if ($handle = opendir($handle)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                if (is_dir($entry)) {
                    echo "Folder => " . $entry . "<br>";
                    countStuff($entry, $fileCount, $folderCount);
                    $folderCount++;
                } else {
                    echo "File   => " . $entry . "<br>";
                    $fileCount++;
                }
            }
        }
        closedir($handle);
    }
}
echo "<br>==============<br>";
echo "Total Folder Count : " . $folderCount . "<br>";
echo "Total File Count : " . $fileCount;

?>

注意:我还会发布原始代码,它只计算父目录的文件和文件夹,而不是下面的子文件夹子项:

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            if (is_dir($entry)) {
                echo "Folder => " . $entry . "<br>";
                countStuff($entry, $fileCount, $folderCount);
                $folderCount++;
            } else {
                echo "File   => " . $entry . "<br>";
                $fileCount++;
            }
        }
    }
    echo "<br>==============<br>";
    echo "Total Folder Count : " . $folderCount . "<br>";
    echo "Total File Count : " . $fileCount;
    closedir($handle);
}