Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielkośc pliku
Forum PHP.pl > Forum > Przedszkole
sajborg
Siemka wiem ze to moze byc banalne ale nie wiem jak to zrobic mam taką wiekość pliku
Kod
798542
Jets to podane w KB tylko ze bez przerwy jak zrobic zeby to było podawane w MB czyli w takiej postaci 0,80 MB albo zeby było podawane w takiej postaci 798,5 KB
BENY_PL
a gdzie ta przerwa? Może to wielkość pliku w Bajtach a nie KB? Bo jeśli w KB? to ta przerwa jast gdzie, 3 cyfry od końca? Jeśli tak to żaden problem?

  1. <?php
  2. $size=&#092;"712345\";
  3. $dl=strlen($size);
  4. $text=substr($size,0,($dl-3));
  5. $text.=&#092;".\".substr($size,($dl-3));
  6. echo $text.&#092;" KB<br>\";
  7. $text=round($text/1024,2);
  8. echo $text.&#092;" MB<br>\";
  9. ?>


//dodałem (MB)
rogrog
Cytat(BENY_PL @ 2004-08-02 16:34:56)
a gdzie ta przerwa? Może to wielkość pliku w Bajtach a nie KB? Bo jeśli w KB? to ta przerwa jast gdzie, 3 cyfry od końca? Jeśli tak to żaden problem?

  1. <?php
  2. $size=&#092;"712345\";
  3. $dl=strlen($size);
  4. $text=substr($size,0,($dl-3));
  5. $text.=&#092;".\".substr($size,($dl-3));
  6. echo $text.&#092;" KB<br>\";
  7. $text=round($text/1024,2);
  8. echo $text.&#092;" MB<br>\";
  9. ?>


//dodałem (MB)

@BENY_PL: ta zmienna $dl jest niepotrzebna, można wykorzystać ujemne parametry dla substr" title="Zobacz w manualu PHP" target="_manual; poza tym po co Ci cudzysłowy przy size questionmark.gif jak to jest integer

np.
  1. <?php
  2. substr ( $size, 0, -3 )
  3. ?>


a tak ogólnie

  1. <?php
  2.  
  3. $size = 712345; //rozmiar pliku w bajtach
  4. $dokladnosc = 2; //dokładność wyniku - parametr dla round()
  5.  
  6. $size_kb = round ( $size/1024, $dokladnosc );
  7. $size_mb = round ( $size/1048576, $dokladnosc );
  8.  
  9. echo &#092;"Rozmiar pliku: $size B == $size_kb Kb == $size_mb Mb\";
  10.  
  11. ?>
sajborg
Dzięki wielkie biggrin.gif
BENY_PL
ten cudzysłów to nawyk, że operacje na łańcuchach wykonuje się tylko na łańcuchach, a w php typy zmiennych są bardzo ulotne, więc to prawda że "" nie były potrzebne. tongue.gif

A co do twojego skryptu rogrog to jest on trochę nie dokładny

1KB <> 1000B

więc wielkość podana przez pawb'a - 798542 to nie ilość Bajtów a KB tylko z usuniętym przecinkiem te 798542 to tak naprawdę 798,542KB a więc 798*1024+542B.

Dopiero jak masz taką wartość możesz dzielić przez 1024 i 1024^2 by otrzymać kolejno KB i MB. Z tym że KB masz już wcześniej biggrin.gif.
rogrog
@BENY_PL: jeśli chodzi o te kilobajty... właśnie nie wiedziałem jak to jest... widziałem w Twoim skrypcie, że dajesz przecinek trzy miejsca od końca (notabene nie lepiej podzielić przez 1000??)

ech ja stwierdzilem ze zrobie na bajty ... zresztą ciekawe skąd mu się wzięły kilobajty bez przerwy smile.gif
FiDO
Mozna tez skorzystac z bardziej uniwersalnej metody:
  1. <?php
  2. function friendly_size($bytes)
  3. {
  4. $sufixes = array(&#092;"B\",\"KB\", \"MB\",\"GB\",\"TB\",);
  5. while ($bytes > 1024)
  6. {
  7. array_shift($sufixes);
  8. $bytes = $bytes / 1024;
  9. }
  10. if (is_int($bytes))
  11. return sprintf(&#092;"%d %s\", $bytes, $sufixes[0]);
  12. else
  13. return sprintf(&#092;"%.2f %s\", $bytes, $sufixes[0]);
  14. }
  15. ?>

Funkcja przyjmuje jako argument wielkosc w bajtach (ale Ty masz w KB, wiec mozesz po prostu usunac pierwszy element tablicy $sufixes i wtedy mozesz juz przekazywac wielkosc w KB). Zwracany jest ciag w postaci "przyjaznej" tzn. dla wielkosci < 1024 bajtow zostaje zwrocone "x B", dla 1024 < x < 1024^2 zwracane jest "x KB", dla nastepnego przedzialu w MB, potem GB i TB analogicznie.
byther
Oto moje "trzy grosze"... smile.gif
  1. <?php
  2. function friendly_size( $bytes )
  3. {
  4. $suffixes = array( 'B', 'kB', 'MB', 'GB', 'TB' );
  5. foreach( $suffixes as $w => $n )
  6. {
  7. $r = $bytes / pow( 1024, $w );
  8. if ( $r < 1024 )
  9. return round( $r, 2 ) . &#092;" $n\";
  10. }
  11. }
  12. ?>


--- update
@FIDO: Twoja wersja jest lepsza, ale nie mogłem się powstrzymać... i poprawiłem.
  1. <?php
  2. function friendly_size( $bytes )
  3. {
  4. $suffixes = array( 'B', 'kB', 'MB', 'GB', 'TB' );
  5. for( $i = 0; $bytes >= 1000; $i++ )
  6. $bytes = $bytes / 1024;
  7. return round( $bytes, 2 ) . &#092;" {$suffixes[$i]}\";
  8. }
  9. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.