PHP – Byte dönüştürme fonksiyonu (Convert bytes)

php-code
Şu an yeni bir site üzerinde çalışıyorum ve dosya/klasör işlemleri için kullandığım bazı fonksiyonların ufak oldukları kadar işlevsel de olduklarını düşünüp sitede yayınlamaya karar verdim. Byte dönüştürme de faydalı olduğunu düşündüğüm fonksiyoncuklardan biri ve adı üstünde dosya byte değerini farklı formatlarda ifade etmeye yarıyor (1024 Kb->1 Mb, 1 Gb->1024 Mb gibi).

Fonksiyon içeriği:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function byteFormat($bytes, $unit = "", $decimals = 2) {
    $units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4,
            'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8);
    $value = 0;
    if ($bytes > 0) {
        // Generate automatic prefix by bytes
        // If wrong prefix given
        if (!array_key_exists($unit, $units)) {
            $pow = floor(log($bytes)/log(1024));
            $unit = array_search($pow, $units);
        }
 
        // Calculate byte value by prefix
        $value = ($bytes/pow(1024,floor($units[$unit])));
    }
 
    // If decimals is not numeric or decimals is less than 0
    // then set default value
    if (!is_numeric($decimals) || $decimals < 0) {
        $decimals = 2;
    }
 
    // Format output
    return sprintf('%.' . $decimals . 'f '.$unit, $value);
  }

Fonksiyonun kullanımı:

1
2
3
4
5
6
7
8
9
echo byteFormat(4096, "B") ."\n";
echo byteFormat(8, "B", 2) . "\n";
echo byteFormat(1, "KB", 5) . "\n";
echo byteFormat(1073741824, "B", 0) . "\n";
echo byteFormat(1073741824, "KB", 0) . "\n";
echo byteFormat(1073741824, "MB") . "\n";
echo byteFormat(1073741824) . "\n";
echo byteFormat(1073741824, "TB", 10) . "\n";
echo byteFormat(1099511627776, "PB", 6) . "\n";

Kaynak: if-not-true-then-false.com
Düzenleme için Umut‘a teşekkürler.

İlginizi Çekebilecek Diğer İçerikler

Facebook Yorumları

7 Yorum

Uyarı: Yorumlarda link kullanmayınız. Link içeren yorumlar otomatik olarak spam kabul edilmektedir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir