-
php 文件目录大小统计函数
文件夹大小统计主要是计算文件夹里面的文件大小然后相加之后再利用函数进行统计了,统计文件大小函数我们使用php filesize函数了,其它的全用目录相关的处理函数,下面一起来看看.
计算文件夹的大小,包括子文件夹,格式化输出文件夹大小、文件数、子文件夹数信息,代码如下:
- <?php
- //代码也可以用于统计目录数
- //格式化输出目录大小 单位:Bytes,KB,MB,GB
- function getDirectorySize($path)
- {
- $totalsize = 0;
- $totalcount = 0;
- $dircount = 0;
- if ($handle = opendir ($path))
- {
- while (false !== ($file = readdir($handle)))
- {
- $nextpath = $path . '/' . $file;
- if ($file != '.' && $file != '..' && !is_link ($nextpath))
- {
- if (is_dir ($nextpath))
- {
- $dircount++;
- $result = getDirectorySize($nextpath);
- $totalsize += $result['size'];
- $totalcount += $result['count'];
- $dircount += $result['dircount'];
- }
- elseif (is_file ($nextpath))
- {
- $totalsize += filesize ($nextpath);
- $totalcount++;
- }//开源代码phpfensi.com
- }
- }
- }
- closedir ($handle);
- $total['size'] = $totalsize;
- $total['count'] = $totalcount;
- $total['dircount'] = $dircount;
- return $total;
- }
- ?>
PHP中计算文件目录大小其实主要是用到"filesize"函数,通过递归的方法计算每个文件的大小,再计算他们的和即是整个文件目录的大小.
因为直接返回的文件大小是以字节为单位的,所以我们一般还要经过换算得到我们常见得大小,以下是单位换算的函数,代码如下:
- function sizeFormat($size)
- {
- $sizeStr='';
- if($size<1024)
- {
- return $size." bytes";
- }
- else if($size<(1024*1024))
- {
- $size=round($size/1024,1);
- return $size." KB";
- }
- else if($size<(1024*1024*1024))
- {
- $size=round($size/(1024*1024),1);
- return $size." MB";
- }
- else
- {
- $size=round($size/(1024*1024*1024),1);
- return $size." GB";
- }
- }
- $path="/home/www/htdocs";
- $ar=getDirectorySize($path);
- echo "<h4>路径 : $path</h4>";
- echo "目录大小 : ".sizeFormat($ar['size'])."<br>";
- echo "文件数 : ".$ar['count']."<br>";
- echo "目录术 : ".$ar['dircount']."<br>";
- //print_r($ar);
后面附一个单位函数,该函数最主要的是根据文件的字节数,判断应当选择的统计单位,也就是说一个文件用某一单位比如MB,那么该文件肯定小于1GB,否则当然要用GB作为单位了,而且文件要大于KB,不然的话得用更小的单位统计,该函数代码如下:
- //size() 统计文件大小
- function size($byte)
- {
- if($byte < 1024) {
- $unit="B";
- }
- else if($byte < 10240) {
- $byte=round_dp($byte/1024, 2);
- $unit="KB";
- }
- else if($byte < 102400) {
- $byte=round_dp($byte/1024, 2);
- $unit="KB";
- }
- else if($byte < 1048576) {
- $byte=round_dp($byte/1024, 2);
- $unit="KB";
- }
- else if ($byte < 10485760) {
- $byte=round_dp($byte/1048576, 2);
- $unit="MB";
- }
- else if ($byte < 104857600) {
- $byte=round_dp($byte/1048576,2);
- $unit="MB";
- }
- else if ($byte < 1073741824) {
- $byte=round_dp($byte/1048576, 2);
- $unit="MB";
- }
- else {
- $byte=round_dp($byte/1073741824, 2);
- $unit="GB";
- }
- $byte .= $unit;
- return $byte;
- }
- function round_dp($num , $dp)
- {
- $sh = pow(10 , $dp);
- return (round($num*$sh)/$sh);
- }
出处:http://www.phpfensi.com/php/20140912/5486.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式