Php 回显所有文件的组合大小
我有这个脚本,除了一个小问题。基本上,它获取指定目录中所有文件的总大小,但不包括文件夹 我的目录结构像 上传 ->客户01 ->另一个客户 ->其他客户 …等等 每个文件夹都包含各种文件,因此我需要脚本查看“uploads”目录,并给出所有文件和文件夹的大小Php 回显所有文件的组合大小,php,directory,filesize,Php,Directory,Filesize,我有这个脚本,除了一个小问题。基本上,它获取指定目录中所有文件的总大小,但不包括文件夹 我的目录结构像 上传 ->客户01 ->另一个客户 ->其他客户 …等等 每个文件夹都包含各种文件,因此我需要脚本查看“uploads”目录,并给出所有文件和文件夹的大小 <?php $total = 0; //Total File Size //Open the dir w/ opendir(); $filePath = "uploads/" . $_POST["USER_NAME"] .
<?php
$total = 0; //Total File Size
//Open the dir w/ opendir();
$filePath = "uploads/" . $_POST["USER_NAME"] . "/";
$d = opendir( $filePath ); //Or use some other path.
if( $d ) {
while ( false !== ( $file = readdir( $d ) ) ) { //Read the file list
if (is_file($filePath.$file)){
$total+=filesize($filePath.$file);
}
}
closedir( $d ); //Close the direcory
echo number_format($total/1048576, 2);
echo ' MB<br>';
}
else {
echo "didn't work";
}
?>
试试这个:
exec("du -s $filepath",$a);
$size = (int)$a[0]; // gives the size in 1k blocks
不过,请确保验证了$\u POST[“USER\u NAME”]
,否则可能会导致严重的安全漏洞。(例如,$\u POST[“用户名”]=“rm-r/*”
)尝试以下方法:
exec("du -s $filepath",$a);
$size = (int)$a[0]; // gives the size in 1k blocks
不过,请确保验证了$\u POST[“USER\u NAME”]
,否则可能会导致严重的安全漏洞。(例如,$\u POST[“用户名”]=“rm-r/*”
)最简单的方法是设置递归函数
function getFolderSize($dir)
{
$size = 0;
if(is_dir($dir))
{
$files = scandir($dir);
foreach($files as $file)
if($file != '.' && $file != '..')
if(filetype($dir.DIRECTORY_SEPARATOR.$file) == 'dir')
$size += getFolderSize($dir.DIRECTORY_SEPARATOR.$file);
else
$size += filesize($dir.DIRECTORY_SEPARATOR.$file);
}
return $size;
}
编辑我现在修复的代码中有一个小错误最简单的方法是设置递归函数
function getFolderSize($dir)
{
$size = 0;
if(is_dir($dir))
{
$files = scandir($dir);
foreach($files as $file)
if($file != '.' && $file != '..')
if(filetype($dir.DIRECTORY_SEPARATOR.$file) == 'dir')
$size += getFolderSize($dir.DIRECTORY_SEPARATOR.$file);
else
$size += filesize($dir.DIRECTORY_SEPARATOR.$file);
}
return $size;
}
编辑我现在修复的代码中有一个小错误在这里面查找关键字目录:一个人有一个很棒的函数,可以计算目录的大小
或者,
如果读取的文件是目录,则可能必须进行递归或循环
浏览一下这里面的关键字目录:一个人有一个很棒的函数,可以计算目录的大小
或者,
如果读取的文件是目录,则可能必须进行递归或循环
通过我会使用一些SPL
$filePath = "uploads/" . $_POST["USER_NAME"];
$total = 0;
$d = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($filePath),
RecursiveIteratorIterator::SELF_FIRST
);
foreach($d as $file){
$total += $file->getSize();
}
echo number_format($total/1048576, 2);
echo ' MB<br>';
$filePath=“uploads/”$_POST[“用户名”];
$total=0;
$d=新的递归迭代器(
新的递归DirectoryIterator($filePath),
递归迭代器::SELF_优先
);
foreach($d作为$file){
$total+=$file->getSize();
}
回音号码_格式($total/1048576,2);
回声“MB
”;
我会使用一些SPL
$filePath = "uploads/" . $_POST["USER_NAME"];
$total = 0;
$d = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($filePath),
RecursiveIteratorIterator::SELF_FIRST
);
foreach($d as $file){
$total += $file->getSize();
}
echo number_format($total/1048576, 2);
echo ' MB<br>';
$filePath=“uploads/”$_POST[“用户名”];
$total=0;
$d=新的递归迭代器(
新的递归DirectoryIterator($filePath),
递归迭代器::SELF_优先
);
foreach($d作为$file){
$total+=$file->getSize();
}
回音号码_格式($total/1048576,2);
回声“MB
”;
我快速比较了我的函数和@Shrinath引用的函数,它们都很快;递归迭代器的速度约为16%,但占用的内存约为11%(通过我的即兴测试)。使用适量的盐,我快速比较了我的函数和@Shrinath引用的函数,它们都很快;递归迭代器的速度约为16%,但占用的内存约为11%(通过我的即兴测试)。使用适量的盐这绝对是我在命令行上要做的。不过,除非真的有必要,否则我有点反对exec。相比之下,如果使用@Patrick的答案真的很慢的话,我才会这样做。@zanlok很公平。避开高管是件好事。尽管如此,我还是喜欢这个解决方案的紧凑性。此外,在更一般的情况下,可能存在符号链接和目录被多次计数的问题du
自动解决这些问题。同意所有计数。谢谢你提供的额外信息。这绝对是我在命令行上要做的。不过,除非真的有必要,否则我有点反对exec。相比之下,如果使用@Patrick的答案真的很慢的话,我才会这样做。@zanlok很公平。避开高管是件好事。尽管如此,我还是喜欢这个解决方案的紧凑性。此外,在更一般的情况下,可能存在符号链接和目录被多次计数的问题du
自动解决这些问题。同意所有计数。谢谢你提供的额外信息。工作得很有魅力。非常感谢,太棒了。工作得很有魅力。非常感谢。