| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
human readable filesizejp- 14.07.04 19:15 Funktio joka konvertoi tiedostonkoon samaan tapaan kuin "ls -h"
<?PHP // Korjattu: 10.1.2005 - ei toiminut yli 2GiB kooilla koska käytti (int), nyt siis toimii. /* human_readable -- Convert filesize to human readable, like "ls -h" NOTE: Not identical! Description string human_readable(number size [, bool blocksize_is_1000 [, integer precision [, string end_suffix]]]) By default it uses blocksize of 1024 and if you set second (blocksize_is_1000) to true it uses 1000 */ function human_readable ($size, $blocksize_is_1000 = false, $precision = 0, $very_end_suffix = "B") { $blocksize = 1024; if ((bool) $blocksize_is_1000) $blocksize = 1000; $suffixes = array ( 1000 => array('','k','M','G','T','P','E','Z','Y'), 1024 => array('','Ki','Mi','Gi','Ti','Pi','Ei','Zi','Yi') ); // By default, use orginal $rtn = "$size $very_end_suffix"; // Loop through all suffixes and get their keys as power foreach ($suffixes[$blocksize] as $power=>$suffix) { // If real size is smaller than current tested suffix in bytes then found! if ($size < pow($blocksize,$power)) break; // Found // Calculate human readable size $newSize = round($size / pow($blocksize,$power), $precision); $rtn = "$newSize {$suffix}{$very_end_suffix}"; } return $rtn; } // http://physics.nist.gov/cuu/Units/binary.html ?> <?PHP // Esimerkki, tulostaa: 122GiB echo human_readable(131122683904); /* Ja todellinen ongelma teille tuleekin jos käytätte, PHP:n filesize funktiota joka ei toimi yli 2GiB kooilla (2^31) */ ?> jp- 19:34 14.7.04 Käytetään siis niin, että annetaan size byteinä. Vielä pitäs taistella se niin, että suuremmissa kooissa se ei olisi niin tarkka noiden pyöristykseni kanssa, mutta esimerkiksi pienemmissä kooissa tulis 9.5kB ja suuremmissa esim 150kB. NiLon 15:49 17.7.04 Juups jos haluat tehdä todella tarkkaa työtä niin otat huomioon että kilo on 1000 eikä 1024. Tai sitten muutat yksiköt oikein eli, KiB, MiB, GiB, TiB, PiB, EiB, ZiB ja YiB. Faktaa aiheesta: http://physics.nist.gov/cuu/Units/binary.html editoitu: 00:58 20.7.04 jp- 22:32 19.7.04 NiLon kirjoitti: Juups jos haluat tehdä todella tarkkaa työtä niin otat huomioon että kilo on 1000 eikä 1024. Tai sitten muutat yksiköt oikein eli, KiB, MiB, GiB, TiB, PiB, EiB, ZiB ja YiB. Faktaa aiheesta: http://physics.nist.gov/cuu/Units/binary.html Hyvä vinkki, toteutanpa tuon. jp- 00:55 20.7.04 Noh, pääsin vihdoin "lisäämään" sen editoidun version, niin siis uloste on nyt tosiaan erilainen. Lähinnä siksi, että eri blocksizellä on eri päätteet tosimaailmassa niin päätin tehä siitä vain valinnan 1024 ja 1000 välillä. Nyt pitäs olla kaikkien standardien mukaan ;) nikopa 21:48 24.10.04 ei toimi yli 2gb kooilla ainakaan editoitu: 00:43 10.1.05 jp- 00:30 10.1.05 nikopa kirjoitti: ei toimi yli 2gb kooilla ainakaan Nyt toimii, hyvä kun kerroit. Siellä sen toimimisen esti se "$size = (int) $size" -rivi luonnollisesti koska integer tyyppiseen (32 bit signed) muutujaan ei mahdu yli 2^31 kokoiset kokonaisluvut. |
![]() Haku
|