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

Yazar: Caner | 31 Aralık 2009 Perşembe 15:59
Kategori: Php, Web Tasarım





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.


Benzer Yazılar

  1. PHP ile tarayıcı tesbit etmek (browser detect)
  2. Egonomik’in sosyal paylaşım özelliği
  3. PHP ile sıkıştırılmış dosyaları sunucu üzerinde açma (All archive extractor)
  4. PHP – Mail gizleme fonksiyonu
  5. PHP ile SQL Insert sorgusu oluşturma fonksiyonu
  6. PHP – Toplama işlemi ile güvenlik kodu scripti
  7. PHP – Resim üzerine yazı yazma (Watermark) fonksiyonu
  8. PHP – Session ile şifreli erişim scripti
  9. PHP – Otomatik link fonksiyonu
  10. PHP ile HTML İçerikli E-Mail Gönderme Scripti

Yazar: Caner

Web Sitesi: http://www.egonomik.com

Johnny Bravo’yum ben. Bu olay “kendini hangi yaşta hissediyorsan o yaştasındır…” felsefesiyle aynı, ne var? (Ne alaka ya çok saçma şeyler yazıyorum farkında mısın-ız? Bu ‘ız’ takısınıda ailecek veya arkadaşlarıyla toplanmış şekilde oturup çekirdek... devamı


5 Yorum » “PHP – Byte dönüştürme fonksiyonu (Convert bytes)”

  1. UB

    31 Aralık 2009 [22:11]

    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. Caner

    1 Ocak 2010 [02:27]

    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.

  3. UB

    1 Ocak 2010 [03:37]

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

  4. UB

    1 Ocak 2010 [17:14]

    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

    1 Ocak 2010 [17:24]

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

Yorum Bırakın

(Anonim yorumları kabul etmiyoruz)


Yorum yazarken güvenlik kodu girmek istemiyorsanız siteye üye olabilirsiniz.