Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Jak obliczyć ile miejsca na serwerze zajmą pliki
Forum PHP.pl > Forum > Przedszkole
-Ramzes-
Witam
W szkole na informatyce, nauczyciel nam zadał zadanie w którym musimy napisać kalkulator który ma obliczyć ile miejsca na serwerze zajmie nam dana ilość plików np po 3KB. Mógłby mnie ktoś nakierować jak to zrobić, ponieważ nigdy wcześniej nie miałem do czynienia z php. Z uwzględnieniem tego że np 1000kb to jeden megabajt
Lejto
a ile miejsca ma mieć serwer?
-Ramzes-
To niema znaczenia, chodzi o to żeby obliczyć ile miejsca zajmie np 1000 plików po 3kb, To ma być prosty kalkulator który to obliczy i wyświetli wynik, że np 1000 plików po 3kb to 3MB. jak się zapisuje 3KB tak 0.03 czy 0.3?
Lejto
takie coś?
  1. <?php
  2. $a = 1000;
  3. $b = 0,3;
  4.  
  5. echo $a * $b;
  6. ?>

to nie jest do końca pełno działający kod operatory matematyczne to podstawa php poczytaj na manualu o tym
maziak
Generalnie rzecz biorac to tutaj nie trzeba niczego podnad proste podstawowe funckje.
Po 1. obsługa formularza
Po 2. operatory

Sprobuj to sam wykombinowac, jak bedziesz mial problemy to postnij to co wykombinowales, chetnie pomoge.
Powiedz tylko czy masz uwzglednic to ze 1MB to 1024 KB (a nie 1000) itd., czy mozesz miec to w pompce?
-Ramzes-
Wykombinowałem takie coś:
  1. <form method="post" action="oblicz.php">
  2. Wpisz ilość plików:
  3. <input type="text" name="pliki">
  4. Wpisz rozmiar pliku:
  5. <input type="text" name="rozmiar">
  6. <input type="submit" value="Policz">
  7. </form>

policz.php
  1. <?php
  2. $pliki=$_POST['pliki'];
  3. $rozmiar=$_POST['rozmiar'];
  4.  
  5. $wynik=$pliki * $rozmiar;
  6. echo $wynik.'kb';
  7. ?>

Cytat
Powiedz tylko czy masz uwzglednic to ze 1MB to 1024 KB (a nie 1000) itd., czy mozesz miec to w pompce?


Muszę
maziak
No, to git, a to z tym 1024 generalnie mozesz rozwiazac tak :
  1. <?php
  2. $pliki=$_POST['pliki']; 
  3. $rozmiar=$_POST['rozmiar']; //Z tym, że wielkosc pliku wejsciowa podana ma byc w KB.
  4.  
  5.  
  6. $wynik=$pliki * $rozmiar;
  7.  
  8.  
  9. $zm=$wynik;
  10. $mnoz=0;
  11. for ($i=0;$i < 4; $i++) {
  12. if (($zm/1024) > 1 ){
  13. $mnoz++;
  14. $zm=$zm/1024;
  15. }
  16.  
  17. }
  18.  
  19. switch ($mnoz) {
  20. case 0: $przed="KB"; break;
  21. case 1: $przed="MB"; break;
  22. case 2: $przed="GB"; break;
  23. case 3: $przed="TB"; break;
  24. }
  25.  
  26. printf(" %.2f", $zm);
  27. echo $przed;
  28. ?>


Jezeli sie myle to mnie poprawcie. smile.gif Mam wrazenie ze sluzy do tego jedna funkcja, ktora mozna wszystko zalatwic, lecz niestety nie moge sobie przypomniec jaka. biggrin.gif Daj znac czy dziala.
Crozin
  1. <?php
  2.  
  3. header('Content-type: text/html; charset=utf-8');
  4.  
  5. if(isset($_POST['submit'])){
  6. $units = array(1 => 'B', 'KB', 'MB', 'GB', 'TB', 'PB');
  7.  
  8. $unit = $_unit = (int) $_POST['unit'];
  9. $size = $_size = (int) $_POST['size'];
  10. $amount = (int) $_POST['amount'];
  11.  
  12. $unitWord = isset($units[$unit]) ? $units[$unit] : $units[2];
  13.  
  14. $_size = $_size * $amount;
  15.  
  16. while($_unit > 1){
  17. $_size *= 1024;
  18. $_unit--;
  19. }
  20.  
  21. $resultSize = $_size;
  22. $resultUnit = $_unit;
  23. $resultUnitWord = $units[1];
  24.  
  25. while(($resultSize / 1024) > 1){
  26. $resultSize /= 1024;
  27. $resultUnit++;
  28. $resultUnitWord = isset($units[$resultUnit]) ? $units[$resultUnit] : ' W cholere....';
  29. }
  30.  
  31. echo sprintf('<p>%s plik(ów) po %s%s = %s%s</p>', $amount, $size, $unitWord, round($resultSize, 2), $resultUnitWord);
  32. }
  33.  
  34. ?><form action="" method="post">
  35. <fieldset>
  36. <legend>Kalkulator</legend>
  37. <label style="display: block;">Ilość plików: <input type="text" name="amount" value="<?php echo isset($_POST['amount']) ? (int) $_POST['amount'] : null; ?>" /></label>
  38. <label>
  39. Wielkość: <input type="text" name="size" value="<?php echo isset($_POST['size']) ? (int) $_POST['size'] : null; ?>" />
  40. <select name="unit">
  41. <option value="1" <?php echo (== $_POST['unit']) ? 'selected="selected"' : null; ?>>Bajty</option>
  42. <option value="2" <?php echo (== $_POST['unit']) ? 'selected="selected"' : null; ?>>Kilobajty</option>
  43. <option value="3" <?php echo (== $_POST['unit']) ? 'selected="selected"' : null; ?>>Megabajty</option>
  44. <option value="4" <?php echo (== $_POST['unit']) ? 'selected="selected"' : null; ?>>Gigabajty</option>
  45. </select>
  46. </label>
  47. <input type="submit" name="submit" value="Oblicz!" style="display: block" />
  48. </fieldset>
  49. </form>
Pisane z palca - ale może akurat zadziała biggrin.gif
marcio
  1. <?php
  2. function konwertuj($number) {
  3. $len = strlen($number);
  4. if($len < 4) {
  5. return sprintf("%d b", $number);
  6. }
  7. if($len >= 4 && $len <= 6) {
  8.  return sprintf("%0.2f Kb", $number / 1024);
  9. }
  10. if($len >= 7 && $len <= 9) {
  11. return sprintf("%0.2f Mb", $number / 1024 / 1024);
  12. }  
  13. return sprintf("%0.2f Gb", $number / 1024 / 1024 / 1024);
  14. }
  15. ?>

Funckja z mojego shell'a

P.S nie zawsze dobrze oblicza smile.gif
Kicok
  1. <?php
  2.  
  3. function rozmiar( $bajty, $po_przecinku = 1 )
  4. {
  5. $jednostki = array( 'B', 'kB', 'MB', 'GB', 'TB' );
  6.  
  7.  
  8. $i = 0;
  9. while( $bajty >= 1024 ) 
  10. {
  11. $bajty /= 1024;
  12. ++$i;
  13. }
  14.  
  15. return round( $bajty, $po_przecinku ) . ' ' . $jednostki[$i];
  16. }
  17.  
  18.  
  19. echo rozmiar( 500 ) . '<br />';
  20. echo rozmiar( 1024 ) . '<br />';
  21. echo rozmiar( 11111, 2 ) . '<br />';
  22. echo rozmiar( 10000000000 ) . '<br />';
  23.  
  24. ?>
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.