PHP-scandir()和检查计数时的无限循环

PHP-scandir()和检查计数时的无限循环,php,Php,我正在用PHP创建一个在线应用程序,作为其中的一部分,我需要有一个功能,我给它一个目录,它将计算该文件夹中的所有文件,该文件夹中的所有文件夹,以及子目录中的所有文件夹等,直到该文件夹中的所有文件和子文件都被计算在内 我尝试过多种方法,通过我自己的研究,大多数人都像我尝试过的那样做,但我的方法没有成功 以下是我当前使用的代码:($uniqueKey参数不是已经调试好的问题。) 我的目录树如下: -www --访问 --php(您将再次向函数发送$directory变量,而不是$uniqueKey'

我正在用PHP创建一个在线应用程序,作为其中的一部分,我需要有一个功能,我给它一个目录,它将计算该文件夹中的所有文件,该文件夹中的所有文件夹,以及子目录中的所有文件夹等,直到该文件夹中的所有文件和子文件都被计算在内

我尝试过多种方法,通过我自己的研究,大多数人都像我尝试过的那样做,但我的方法没有成功

以下是我当前使用的代码:($uniqueKey参数不是已经调试好的问题。)

我的目录树如下:

-www
--访问

--php(您将再次向函数发送
$directory
变量,而不是
$uniqueKey'/'$row
。 在第二个循环中,它尝试访问
'data/storage/uploads/data/storage/uploads/{$uniqueKey}/{$row}'

//Get file count of user
function getFolderFileCount($uniqueKey){
    $totalCount = 0;
    $directory = "data/storage/uploads/" . $uniqueKey;

    $dirContents = scandir($directory);
    foreach($dirContents as $row){
        if($row == '.' || $row == '..')
            continue;
        if(is_dir($directory. $row)){
            $totalCount += getFolderFileCount($uniqueKey . "/" . $row);
            $totalCount++;
        }else{
            $totalCount++;
        }
    }
    return $totalCount;
}
编辑:代码还考虑user500493文件夹中的子文件夹。
我在PHP7.1.9-1上做了一些测试,它完全可以工作。

is_dir()
参数必须是文件夹的路径,而不仅仅是
$row
,因为它只是文件名或目录名。

这很巧妙地完成了一件事,我在重新调用函数时删除了$directory变量,但现在控制台仍然收到垃圾邮件,但这次使用了scandir()文件名太长,因为它正在尝试扫描:“data/storage/uploads/user500493//”当它应该扫描子目录“test”test以获得与“.”和“.”不同的$行时,应该无限长。我将
退出(var_dump($row))
了解更多有关扫描目录时发生的情况的信息。我已经按照您所说的做了,循环错误不再存在。现在唯一的问题是它似乎没有检查子目录中的文件量。为什么要减去2?因为“.”和“.”?因为我们现在忽略了它们,所以您可以删除它。在实现此功能之后,我删除了-2。它现在只是不添加子目录的文件计数。
//Get file count of user
function getFolderFileCount($uniqueKey){
    $totalCount = 0;
    $directory = "data/storage/uploads/" . $uniqueKey;

    $dirContents = scandir($directory);
    foreach($dirContents as $row){
        if($row == '.' || $row == '..')
            continue;
        if(is_dir($directory. $row)){
            $totalCount += getFolderFileCount($uniqueKey . "/" . $row);
            $totalCount++;
        }else{
            $totalCount++;
        }
    }
    return $totalCount;
}