| 代碼如下 |
複製代碼 |
<?php //擷取檔案夾大小 function dir_size($dir) { if (!preg_match('#/$#', $dir)) { $dir .= '/'; } $totalsize = 0; //調用檔案清單 foreach (get_file_list($dir) as $name) { $totalsize += (@is_dir($dir.$name) ? dir_size("$dir$name/") : (int)@filesize($dir.$name)); } return $totalsize; } //擷取檔案清單 function get_file_list($path) { $f = $d = array(); //擷取所有檔案 foreach (get_all_files($path) as $name) { if (@is_dir($path.$name)) { $d[] = $name; } else if (@is_file($path.$name)) { $f[] = $name; } } natcasesort($d); natcasesort($f); return array_merge($d, $f); } //擷取所有檔案 function get_all_files($path) { $list = array(); if (($hndl = @opendir($path)) === false) { return $list; } while (($file=readdir($hndl)) !== false) { if ($file != '.' && $file != '..') { $list[] = $file; } } closedir($hndl); return $list; } //轉換單位 function setupSize($fileSize) { $size = sprintf("%u", $fileSize); if($size == 0) { return("0 Bytes"); } $sizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"); return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i]; } //目錄 $path = './test_dir/'; //顯示檔案清單 print_r(get_file_list($path)).'<br>'; //顯示檔案大小 echo dir_size($path).'<br>'; //顯示轉換過單位的大小 echo setupSize(dir_size($path)); ?> |
dir_size() 是擷取檔案夾大小的函數,函數中使用了遞迴的方法,此函數需要調用 get_file_list() ,擷取檔案夾中的所有檔案清單,如果檔案清單中有檔案夾存在,就調用 get_all_files() 擷取檔案夾下的檔案清單。由此取得目標檔案夾的大小。
setupSize() 是將傳人的大小轉換為易於讀取的檔案單位,可以轉換成 Bytes, KB, MB, GB, TB, PB, EB, ZB, YB 等單位。
列2
| 代碼如下 |
複製代碼 |
<?php function getDirSize($dir) { $handle = opendir($dir); while (false!==($FolderOrFile = readdir($handle))) { if($FolderOrFile != "." && $FolderOrFile != "..") { if(is_dir("$dir/$FolderOrFile")) { $sizeResult += getDirSize("$dir/$FolderOrFile"); } else { $sizeResult += filesize("$dir/$FolderOrFile"); } } } closedir($handle); return $sizeResult; } // 單位自動轉換函式 function getRealSize($size) { $kb = 1024; // Kilobyte $mb = 1024 * $kb; // Megabyte $gb = 1024 * $mb; // Gigabyte $tb = 1024 * $gb; // Terabyte if($size < $kb) { return $size." B"; } else if($size < $mb) { return round($size/$kb,2)." KB"; } else if($size < $gb) { return round($size/$mb,2)." MB"; } else if($size < $tb) { return round($size/$gb,2)." GB"; } else { return round($size/$tb,2)." TB"; } } echo getRealSize(getDirSize(dirname($_SERVER[SCRIPT_FILENAME])./include/)); ?>
######################################################### //function dirsize($dir) //{ // $handle=opendir($dir); // $size = 0; // while ( $file=readdir($handle) ) // { // if ( ( $file == "." ) || ( $file == ".." ) ) continue; // if ( is_dir("$dir/$file") ) // $size += dirsize("$dir/$file"); // else // $size += filesize("$dir/$file"); // } // closedir($handle); // return $size; //} //$big=dirsize(dirname($_SERVER[SCRIPT_FILENAME])."/"); //echo $big; |
得到的結果是小數點後兩位的
$big*1024 得到單位為KB