Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Format liczby zależny od jej rozmiaru
Forum PHP.pl > Forum > Przedszkole
Szunaj85
Poniżej mam skrypt, który wyświetla wszystkie pliki z podanego katalogu wraz z ich rozmiarami. Na końcu natomiast sumuje te rozmiary:
  1. <?php
  2. $directory="folder/";
  3. $dir=opendir($directory);
  4.  
  5. $files_tab = array(); //deklaracja tablicy przechowującej informacje o wszystkich plikach
  6. while($file_name=readdir($dir))
  7. {
  8.  
  9. if(($file_name!=".")&&($file_name!=".."))
  10.     {
  11.     $file_path = $directory.$file_name; //pelna ścieżka do pliku
  12.     $file_tab = array ($file_name, filesize($file_path)); //tablica z informacjami o jednym pliku [0] -> nazwa; [1] -> rozmiar
  13.     array_push($files_tab,  $file_tab); //dołączenie tablicy informacji o jednym pliku do tablicy wszystkich plików
  14.     }
  15. }
  16.  
  17. closedir($dir);
  18.  
  19. $suma = 0;
  20. for ($i=0; $i<count($files_tab); $i++) {
  21.   echo 'nazwa'.$files_tab[$i][0].' '.'rozmiar'.$files_tab[$i][1].'<br/>';
  22.   $suma += $files_tab[$i][1];
  23. }  
  24. echo 'Suma wszystkich plików wynosi '.$suma.'KB';
  25. ?>

Problem polega na tym, że wszystkie rozmiary podawane są w bajtach.
Ja natomiast chcę zrobić taki system, że w zależności czy rozmiar pliku wynosi x bajtów, kilobajtów czy megabajtów liczba nie będzie przekraczać 1024. Natomiast format tej liczby to 2 miejsca po przecinku czyli 1024,00.
Czyli plik który ma rozmiar powyżej jednego bajta wyświetlany był w kilobajtach, a plik który ma rozmiar powyżej jednego kilobajta wyświetlany był w megabajtach.
Np. 140.04 KB, 1.40 MB,
ale nie 1249.08 KB
W pewnym sęsie problem rozwiązałem zamieniając bajty na kilobajty w powyższym kodzie, ale to najprostsze rozwiązanie i nie ma prawie nic wspólnego z tym czego ja chcę dokonać.
  1. <?php
  2. //...
  3. $file_tab = array ($file_name, round( filesize($file_path) / 1024 , 2)); //tablica z informacjami o jednym pliku [0] -> nazwa; [1] -> rozmiar
  4. //...
  5. ?>

No i jeszcze druga część problemu mianowicie każdej wyświetlonej liczbie trzeba przypisać odpowiednią nazwę w echo 'B', 'KB', 'MB', itd
  1. <?php
  2. echo 'Suma wszystkich plików wynosi '.$suma.'KB';
  3. ?>

Ja znalazłem tali skrypt, ale nie mogę coś dać sobie rady z połączeniem tych dwóch skryptów.
  1. <?php
  2. function decodeSize( $bytes )
  3. {
  4.    $types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
  5.    for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
  6.    return( round( $bytes, 2 ) . " " . $types[$i] );
  7. }
  8. ?>
Gacek89
ja widzę rozwiązanie problemu tak, ale może nie oto chodziło bo strasznie zagmatwanie przedstawiłeś swój problem tongue.gif

  1.  
  2.  
  3. <?php
  4.  
  5. function decodeSize( $bytes )
  6. {
  7.    $types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
  8.    for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
  9.    return( round( $bytes, 2 ) . " " . $types[$i] );
  10. }
  11.  
  12.  
  13. $directory="folder/";
  14. $dir=opendir($directory);
  15.  
  16. $files_tab = array();
  17. while($file_name=readdir($dir))
  18. {
  19.  
  20. if(($file_name!=".")&&($file_name!=".."))
  21.     {
  22.     $file_path = $directory.$file_name;
  23.     $file_tab = array ($file_name, filesize($file_path));
  24.     array_push($files_tab,  $file_tab);
  25.     }
  26. }
  27.  
  28. closedir($dir);
  29.  
  30. $suma = 0;
  31. for ($i=0; $i<count($files_tab); $i++) {
  32.   echo 'nazwa'.$files_tab[$i][0].' '.'rozmiar'.decodeSize($files_tab[$i][1]).'<br/>';
  33.   $suma += $files_tab[$i][1];
  34. }  
  35. echo 'Suma wszystkich plików wynosi '.decodeSize($suma);
  36. ?>
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.