PHP文件大小格式化函數(shù)合集
比如碰到一個(gè)很大的文件有49957289167B,大家一看這么一長(zhǎng)串的數(shù)字后面單位是字節(jié)B,還是不知道這個(gè)文件的大小是一個(gè)什么概念,我們把它轉(zhuǎn)換成GB為單位,就是46.53GB。用下面這些函數(shù)就可以完成這個(gè)工作:
//轉(zhuǎn)換單位
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];
}
function byte_format($size, $dec=2){
$a = array("B", "KB", "MB", "GB", "TB", "PB");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size,$dec)." ".$a[$pos];
}
/* Use : echo format_size(filesize("fichier"));
Example result : 13,37 Ko */
function format_size($o) {
$size = array('Go' => 1073741824, 'Mo' => 1048576, 'Ko' => 1024, 'octets' => 1);
foreach ($size as $k => $v)
if ($o >= $v) {
if ($k == 'octets')
return round($o).' '.$k;
return number_format($o / $v, 2, ',', ' ').' '.$k;
}
}
/**
* 文件大小格式化
* @param integer $size 初始文件大小,單位為byte
* @return array 格式化后的文件大小和單位數(shù)組,單位為byte、KB、MB、GB、TB
*/
function file_size_format($size = 0, $dec = 2) {
$unit = array("B", "KB", "MB", "GB", "TB", "PB");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
$result['size'] = round($size, $dec);
$result['unit'] = $unit[$pos];
return $result['size'].$result['unit'];
}
echo file_size_format(123456789);
/**
* 文件大小單位格式化
* @param $bytes 文件實(shí)際大小,單位byte
* @param $prec 轉(zhuǎn)換后精確度,默認(rèn)精確到小數(shù)點(diǎn)后兩位
* @return 轉(zhuǎn)換后的大小+單位的字符串
*/
function fsizeformat($bytes,$prec=2){
$rank=0;
$size=$bytes;
$unit="B";
while($size>1024){
$size=$size/1024;
$rank++;
}
$size=round($size,$prec);
switch ($rank){
case "1":
$unit="KB";
break;
case "2":
$unit="MB";
break;
case "3":
$unit="GB";
break;
case "4":
$unit="TB";
break;
default :
}
return $size." ".$unit;
}
/**
* 容量格式化
* @param String 文件名(文件路徑)
* @return 如果文件存在返回格式化的字符串 如果錯(cuò)誤返回錯(cuò)誤信息 Unknown File
*/
function sizeFormat ($fileName){
//獲取文件的大小
@ $filesize=filesize($fileName);
//如果文件不存在返回錯(cuò)誤信息
if(false==$filesize){
return 'Unknown File';
}
//格式化文件容量信息
if ($filesize >= 1073741824) $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
elseif ($filesize >= 1048576) $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
elseif ($filesize >= 1024) $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
else $filesize = $filesize . ' Bytes';
return $filesize;
}
//測(cè)試函數(shù)
echo sizeFormat('config.inc.php');
/**
* 文件大小格式化
* @param type $filesize
*/
private function sizeCount($filesize)
{
if ($filesize >= 1073741824) {
$filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
}
else if ($filesize >= 1048576) {
$filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
}
else if ($filesize >= 1024) {
$filesize = round($filesize / 1024 * 100) / 100 . ' KB';
}
return $filesize;
}
//該函數(shù)最主要的是根據(jù)文件的字節(jié)數(shù),判斷應(yīng)當(dāng)選擇的統(tǒng)計(jì)單位,也就是說一個(gè)文件用某一單位比如MB,那么該文件肯定小于1GB,否則當(dāng)然要用GB作為單位了,而且文件要大于KB,不然的話得用更小的單位統(tǒng)計(jì)。該函數(shù)代碼如下
//size() 統(tǒng)計(jì)文件大小
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;
}
//輔助函數(shù) round_up(),該函數(shù)用來取舍小數(shù)點(diǎn)位數(shù)的,四舍五入。
function round_dp($num , $dp)
{
$sh = pow(10 , $dp);
return (round($num*$sh)/$sh);
}
這樣我們就能很好額統(tǒng)計(jì)任何一個(gè)文件的大小了,首先通過系統(tǒng)自帶的filesize()函數(shù)獲得文件的字節(jié)數(shù),再用上面的這些函數(shù)換算成適當(dāng)?shù)膯挝痪涂梢粤?/P>
相關(guān)文章
laravel5創(chuàng)建service provider和facade的方法詳解
這篇文章主要介紹了laravel5創(chuàng)建service provider和facade的方法,實(shí)例分析了laravel創(chuàng)建service、provider和facade類的具體步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07PHP數(shù)據(jù)庫萬能引擎類adodb配置使用以及實(shí)例集錦
ADODB 是一種兼容的各類數(shù)據(jù)庫應(yīng)用程序接口(API),各種數(shù)據(jù)庫都可以。MySQL,PostgreSQL,Interbase,F(xiàn)irebird,Informix,Oracle,MS SQL 7,F(xiàn)oxpro,Access,ADO,Sybase,F(xiàn)rontBase,DB22014-06-06ThinkPHP框架設(shè)計(jì)及擴(kuò)展詳解
本文詳細(xì)介紹了ThinkPHP框架的框架分層及url路由、ThinkPHP擴(kuò)展、數(shù)據(jù)庫驅(qū)動(dòng)擴(kuò)展、Behavior行為擴(kuò)展以及源碼分析與不足,講解的十分全面系統(tǒng),這里推薦給大家,有想學(xué)習(xí)ThinkPHP的小伙伴千萬不要錯(cuò)過。2014-11-11在服務(wù)端進(jìn)行目錄建立、刪除,文件上傳、刪除的過程的php代碼
下面的php代碼具有查看服務(wù)器端目錄和文件,刪除文件夾等操作,是學(xué)習(xí)php文件操作不錯(cuò)的參考資料2008-09-09Laravel框架基于中間件實(shí)現(xiàn)禁止未登錄用戶訪問頁面功能示例
這篇文章主要介紹了Laravel框架基于中間件實(shí)現(xiàn)禁止未登錄用戶訪問頁面功能,結(jié)合實(shí)例形式分析了Laravel框架中間件生成、注冊(cè)及使用相關(guān)操作技巧,需要的朋友可以參考下2019-01-01PHP設(shè)置圖片文件上傳大小的具體實(shí)現(xiàn)方法
PHP默認(rèn)的上傳限定是最大2M,想上傳超過此設(shè)定的文件,需要調(diào)整PHP、apache等的一些參數(shù)2013-10-10