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