這篇文章主要介紹了PHP統(tǒng)計(jì)目錄大小的自定義函數(shù)分享,本文使用遞歸方法統(tǒng)計(jì)一個(gè)目錄中所有文件的大小,需要的朋友可以參考下
計(jì)算文件、磁盤分區(qū)和目錄的大小在各種應(yīng)用程序中都是常見的任務(wù)。計(jì)算文件的大小可以通過前面介紹過的filesize()函數(shù)完成,統(tǒng)計(jì)磁盤大小也可以使用disk_free_space()和disk_total_space()兩個(gè)函數(shù)實(shí)現(xiàn)。但PHP目前并沒有提供目錄總大小的標(biāo)準(zhǔn)函數(shù),因此我們要自定義一個(gè)函數(shù)來完成這個(gè)任務(wù)。首先要考慮計(jì)算的目錄中有沒有包含其他子目錄的情況,如果沒有子目錄,目錄下所有文件的大小相加后的總和就是這個(gè)目錄的大小。如果包含子目錄,就按照這個(gè)方法再計(jì)算一下子目錄的大小,使用遞歸函數(shù)看來最適合此項(xiàng)任務(wù)。計(jì)算目錄大小的自定義函數(shù)如下所示:
- <?php
- //自定義一個(gè)函數(shù)dirSize(),統(tǒng)計(jì)傳入?yún)?shù)的目錄大小
- function dirSize($directory){
- $dir_size = 0; //用來累加各個(gè)文件大小
- if($dir_handle = @opendir($directory)){ //打開目錄,并判斷是否能成功打開
- while($filename = readdir($dir_handle)){ //循環(huán)遍歷目錄下的所有文件
- if($filename != "."&& $filename != ".."){ //一定要排除兩個(gè)特殊的目錄
- $subFile = $directory."/".$filename; //將目錄下的子文件和當(dāng)前目錄相連
- if(is_dir($subFile)) //如果為目錄
- $dir_size += dirSize($subFile); //遞歸地調(diào)用自身函數(shù),求子目錄的大小
- if(is_file($subFile)) //如果是文件
- $dir_size += filesize($subFile); //求出文件的大小并累加
- }
- }
- closedir($dir_handle); //關(guān)閉文件資源
- return $dir_size; //返回計(jì)算后的目錄大小
- }//www.survivalescaperooms.com
- }
- $dir_size = dirSize("phpMyAdmin"); //調(diào)用該函數(shù)計(jì)算目錄大小
- echo round($dir_size/pow(1024,1),2)."KB"; //字節(jié)數(shù)轉(zhuǎn)換為“KB”單位并輸出
- ?>
也可以使用exec()或system()函數(shù)調(diào)用操作系統(tǒng)命令“du”來返回目錄的大小。但出于安全原因,這些函數(shù)通常是禁用的,而且不利于跨平臺(tái)操作。
新聞熱點(diǎn)
疑難解答