首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 格式化檔案大小輸出:遞歸實現 B/KB/MB/GB/TB 自動轉換

     編輯:PHP 綜合知識

函數代碼

<?php
/**
 * 格式化位元組數為人類可讀字串
 * @param int|float $bytes 位元組數
 * @param int       $decimals 小數位數(預設 2)
 * @return string 如 19.71 MB
 */
function format_bytes($bytes, $decimals = 2) {
    if ($bytes < 0) return '0 B';
    $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    $factor = floor((strlen((string)$bytes) - 1) / 3); // 以 1024 為基底的冪次
    $factor = min($factor, count($units) - 1);
    return sprintf("%.*f %s", $decimals, $bytes / (1024 ** $factor), $units[$factor]);
}

// 遞歸版(教學用)
function format_bytes_recursive($bytes, $times = 0) {
    if ($bytes >= 1024) {
        return format_bytes_recursive($bytes / 1024, $times + 1);
    }
    $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    return sprintf('%.2f %s', $bytes, $units[$times]);
}

使用範例

<?php
echo format_bytes(20667564);        // 19.71 MB
echo format_bytes(1024);            // 1.00 KB
echo format_bytes(1073741824);      // 1.00 GB
echo format_bytes(123);             // 123.00 B
echo format_bytes(0);               // 0.00 B
echo format_bytes(1234567890123);   // 1.12 TB

單位換算對照表

單位全名倍數 (1024^n)約略十進位
BByte1024^01
KBKilobyte1024^11,024
MBMegabyte1024^21,048,576
GBGigabyte1024^31,073,741,824
TBTerabyte1024^41,099,511,627,776
PBPetabyte1024^51.13e15
EBExabyte1024^61.15e18
ZBZettabyte1024^71.18e21
YBYottabyte1024^81.21e24

注意事項

  • 1000 vs 1024:硬碟廠商用 1000 (SI),作業系統/記憶體用 1024 (IEC)。本函數採 1024,符合 OS 顯示習慣。
  • 浮點精度:極大數值(> PB)PHP float 可能精度不足,建議用 BCMath 或 GMP。
  • 負數處理:直接回傳 0 B 或拋出異常。
  • 中文環境:單位可改為『位元組』、『千位元組』等,但國際慣用 KB/MB/GB。

進階:支援 bit/Byte 切換

function format_bits($bits, $decimals = 2) {
    return format_bytes($bits / 8, $decimals) . ' (bits)';
}

總結

一個 format_bytes() 函數即可滿足 99% 檔案大小顯示需求。遞歸版適合教學理解遞歸與單位遞增邏輯;非遞歸版效能更好、程式碼更簡潔。記得處理邊界值(0、負數、超大數)與單位制統一(1024)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved