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

7 Yorum

  1. UB dedi ki:

    Sayıyı strlen fonksyionu ile karakter sayısına göre algılatmak pek akıl karı olmamış. Onun yerine öncelikle is_numeric() ile sayısal olduÄŸunun kontrolü yapılmalı, daha sonra sayı (int)$sayi ile integer’a cast edilmeli ve daha sonra if($sayi < 1024) gibi kontroller ile boyut kontrolünün yapılması daha saÄŸlıklı sonuçlar üretecektir.
    Çünkü 1000 Byte 1KB deÄŸil, 1024 Bayt 1KB eder ve 1000 de 1024 de strlen 4’e denk gelir.
     
    Mutlu yıllar. :)

  2. UB dedi ki:

    Unutmazsam yarın yapayım. Muhtemelen strlen’in kullanımına örnek için koymuÅŸlardır onu PHP.net’e .
     
    Mutlu yıllar

  3. Caner Öncel dedi ki:

    Php manual üzerinde yayınlanan bir kodu da tekzip ettin ya tebrik ediyorum seni :) Ben de matematik konusunda pek iyi değilimdir fakat yinede neden 1024/1024 yerine 1048576 gibi bir ifade kullanmamışlar diye kıllanmış ve fakat bi bildikleri vardır diye düşünmüştüm.

     

    Eh artık madem düzelttin kodun mantıklı halini de bizimle paylaşırsın herhalde Umutcum :)

     

    Mutlu yıllar.

  4. UB dedi ki:

    http://www.if-not-true-then-false.com/2009/12/format-bytes-with-php-b-kb-mb-gb-tb-pb-eb-zb-yb-converter/
    Buradaki 1024’ün üstlerine göre iÅŸlem yapan ve bu yüzden 1000’e göre iÅŸlem yapmadığından tam anlamıyla doÄŸru çalışan bir kod örneÄŸi.
    3242536 gibi bir sayı değil de 1024 / 1024 yazmalarının tek nedeni, kodun anlaşılır olmasını istemeleri olsa gerek. Çünkü aynı işlemi PHP çalışırken yapacak. Hani kolay görülsün, anlaşılsın diye.
     
    Öyle işte.
     
    Mutlu yıllar tekrardan.
     
     
     

  5. Caner Öncel dedi ki:

    Çok teşekkür ettik Umut ve tekrar tekrar mutlu yıllar :)

  6. alii dedi ki:

    lenn 1 gb kac byte coqq lazımm nolr hemen cewapp wernnn

  7. Ahmet dedi ki:

    Arkadaşım, bayt ile gigabayt arasındaki deÄŸerler sırasıyla şöyle; gigabayt, megabayt, kilobayt, bayt. Bir basamak aÅŸağıya atlamak istediÄŸinde elindeki deÄŸeri her zaman 1024 ile çarpıyorsun. Dolayısı ile 1gb = 1024mb, 1mb = 1024kb … ÅŸeklinde elde ettiÄŸin her deÄŸeri 1024 ile çarptığın sürece istediÄŸin birimde çevrilmiÅŸ deÄŸerin ne olacağını bulabilirsin.

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.