Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wielkośc pliku, KB na MB
sajborg
post
Post #1





Grupa: Zarejestrowani
Postów: 271
Pomógł: 0
Dołączył: 20.08.2003
Skąd: Szczecinek

Ostrzeżenie: (0%)
-----


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


--------------------
Warsztat: gPHPEdit | Linux 2.6.17-11-generic (Ubuntu)
Sprzęt: Noteook BenQ A33E
___________________________________________________
Go to the top of the page
+Quote Post
BENY_PL
post
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 12.07.2004

Ostrzeżenie: (0%)
-----


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)

Ten post edytował BENY_PL 2.08.2004, 16:09:35


--------------------
Drobne awarie nie isnieją, jeżeli miała jednak miejsce drobna awaria, oznacza to, że nie poznałeś jeszcze jej rzeczywistych rozmiarów.
Go to the top of the page
+Quote Post
rogrog
post
Post #3





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


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


Ten post edytował rogrog 2.08.2004, 17:23:00


--------------------
Go to the top of the page
+Quote Post
sajborg
post
Post #4





Grupa: Zarejestrowani
Postów: 271
Pomógł: 0
Dołączył: 20.08.2003
Skąd: Szczecinek

Ostrzeżenie: (0%)
-----


Dzięki wielkie biggrin.gif


--------------------
Warsztat: gPHPEdit | Linux 2.6.17-11-generic (Ubuntu)
Sprzęt: Noteook BenQ A33E
___________________________________________________
Go to the top of the page
+Quote Post
BENY_PL
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 12.07.2004

Ostrzeżenie: (0%)
-----


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.


--------------------
Drobne awarie nie isnieją, jeżeli miała jednak miejsce drobna awaria, oznacza to, że nie poznałeś jeszcze jej rzeczywistych rozmiarów.
Go to the top of the page
+Quote Post
rogrog
post
Post #6





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


@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

Ten post edytował rogrog 3.08.2004, 11:08:15


--------------------
Go to the top of the page
+Quote Post
FiDO
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


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.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
byther
post
Post #8





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 15.06.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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


Ten post edytował byther 3.08.2004, 13:10:53


--------------------
Sygnaturka: jest
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 20:01