bayt GBS / Mbs dönüştürme

2 Cevap

Böyle bir anahtar durum var

switch($filesize_in_bytes){
    case "10Mb <= $filesize_in_bytes <= 100Mb":
        //do some stuff and break;

    case "1Gb <= $filesize_in_bytes <= 10Gb":
        //do some stuff and break;
}

Gördüğünüz gibi $filesize_in_bytes nasıl Mbs ve GBS ile o değerler bayt dönüştürmek olabilir, şimdi bayt olduğunu? Olgular 10Mb, 100Mb, 1Gb and so on Ben bayt bunları doğrudan kodlamalısınız olamaz ve değerlerini çok kullanıcının durumuna göre farklı.

Dava veritabanından getirilen edilir:

$rule1[0] = '10Mb';
$rule1[1] = '100Mb';

$rule2[0] = '1Gb';
$rule2[1] = '10Gb';

2 Cevap

Öncelikle, ben bu veritabanı tasarımı gerçekten sevmiyorum. Yani aslında olduğu gibi, bunun yerine {[(1 gibi bir şey yapmak isteyebilirsiniz (yani 100Gb gibi şeyler için tam bir BIGINT gerektirecek) bir tamsayı olarak sınırı saklayarak bayt düzeyinde hassas alan atık değil )]} ve limit_unit ENUM('b','kb','Mb','Gb'). Veritabanından çekerek Sonra, sadece bir bayt değerini almak için basit bir matematik yapabilirsiniz:

$limit_amount = 10; // pull from
$limit_unit = 'Mb'; // database
$units = array('b' => 1, 'kb' => 125, 'Mb' => 125000, 'Gb' => 125000000);
$limit_in_bytes = $limit_amount * $units[$limit_unit];

(Not kB ve MB, daha yaygın birimlerinden farklı birimler kullanımlar kb ve Mb, bu sistem. Eğer Eğer ikincisi istedi, doğru dönüşüm yapmak!)

Bu çok daha fazla veri-verimli dizeleri olarak depolamak yerine, dizeleri girerken kullanıcıların "5lolCats" gibi saçma birimlerde koyamazsınız sağlar, ve kolay geri bayt veri çekmek için yapar.

... Ya da sadece bigint kullanabilirsiniz. Ben gerçekten çok sürece dizeleri olarak tamsayı değerleri saklamak değil gibi, umursamıyorum.

Tahdah. Sen bayt yerine bir dizge olarak veritabanından miktarı çekti, ve şimdi garabeti karşılaştırmak sihirli dize olmadan doğrudan bir tamsayı karşılaştırma yapabilirsiniz.

Tam olarak bunu yapmak için bir işlev sağlar aşağıdaki PHP komut dosyası bir göz atın:

http://aidanlister.com/2004/04/human-readable-file-sizes/