dateigröße fehlerhafte ausgabe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • dateigröße fehlerhafte ausgabe

    hy
    ich lasse mir die dateigrößen von einzelnen dateien mit folgendem script ausgeben
    PHP-Code:
    $size filesize("pdf/$file");
    $sizes = Array('B''KB''MB''GB''TB''PB''EB');
    $ext $sizes[0];
    for (
    $i=1; (($i count($sizes)) && ($size >= 1024)); $i++) {
    $size $size 1024;
    $ext  $sizes[$i];
    $sizegerundet round ($size);
    echo 
    "$sizegerundet"
    im bereich bis 999 kb wird die größe korrekt ausgegeben, danach (also > 1mb) schreibt er für eine datei mit 3 MB nicht 3 MB sondern 3 KB?!

    warum?
    kann mir jemand helfen?

    danke und guten rutsch

  • #2
    benutz doch einfach folgende funktion:

    PHP-Code:
    function getFilesize($path) {
        if(!
    file_exists($path)) {
            return 
    false;
        } else {
            
    $size filesize($path);
            
    $return "";
            
            
    //Byte
            
    if($size 1024) {
                  
    $return number_format($size0","".")." Bytes";
               }
            
    //Kilobyte
            
    elseif($size 1048576) {
                  
    $return number_format(($size 1024), 0","".")." kB";
               }
            
    //Megabyte
            
    elseif($size 1073741824) {
                 
    $return number_format(($size 1048576), 0","".")." MB";
               }
            
    //Gigabyte
            
    elseif($size 1099511627776) {
                   
    $return number_format(($size 1073741824), 0","".")." GB";
               }
               
            return 
    $return;
        }

    johnpatcher

    Kommentar


    • #3
      bei mir klappt die optimierte version ganz gut (obwohl ich nichts über 1 gb testen kann)
      PHP-Code:
      $size filesize('C:\\pdf995\temp.ps');
      $sizes = Array('B''KB''MB''GB''TB''PB''EB');
      $anzahlKuerzel count($sizes);
      $sizegerundet 0
      $ext 
      $sizes[0];
      for (
      $i=1; (($i $anzahlKuerzel) && ($size >= 1024)); $i++) {
          
      $size $size 1024;
          
      $ext  $sizes[$i];
          
      $sizegerundet round($size);
      }
      echo 
      $sizegerundet $ext

      Kommentar


      • #4
        wieso so umständlich?
        PHP-Code:
        $size filesize('C:\pdf995\temp.ps');
        $sizes = Array('B''KB''MB''GB''TB''PB''EB');
        $i=1;
        while( ( 
        $size $size>>10 ) >= 1024 )
            ++
        $i;
        echo 
        $size.' '.$sizes[$i]; 
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          @TBT

          das läuft super!

          @ penizillin:

          ich krieg diese Fehlermeldung:

          parse error, unexpected T_VARIABLE in /home/www/xxxxxxx/yyyyy/test.php on line 54

          line 54: $ext = $sizes[0];



          Vielen Dank für Eure Hilfe!!

          Kommentar


          • #6
            PHP-Code:
            ...$sizegerundet 
            ändere das mal in
            PHP-Code:
            ... $sizegerundet 0
            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Ihr seid alle nicht 1337 genug !!11eins

              Original geschrieben von TBT
              wieso so umständlich?
              Diese Frage gebe ich direkt zurück
              PHP-Code:
              $sizes = Array('B''KB''MB''GB');
              $size filesize('pdf/' $file);

              $factor floor(log($size1024));
              $newsize round($size pow(1024$factor));

              echo 
              $newsize ' ' $sizes[$factor]; 
              kleine Erklärung:
              Logarithmus usw. - naja, Mathe halt
              filesize liefert einen (32 Bit) Integer zurück - d.h. größtmögliche Zahl ist 2147483648 (2^31) oder 2 GB. Also werden keine Größeren Zahlen auftauchen, und es werden nur die Größen bis GB gebraucht.
              Dadurch wird auch $factor keine Werte annehmen, für die es im Array $sizes keinen Eintrag gibt - da kann also auch noch eine Prüfung mit isset weggelassen werden.

              Probleme gibt es allerdings bei leeren Dateien (0 Byte) und bei Dateien größer als 2 GB, denn da liefert filesize unter Umständen negative Werte zurück. Beide Fällen würden zu einem "Division durch 0" Fehler führen, also braucht man am besten noch eine If-Abfrage:
              PHP-Code:
              $sizes = Array('B''KB''MB''GB');
              $size filesize('pdf/' $file);

              if (
              $size 0) {
                  
              $factor floor(log($size1024));
                  
              $newsize round($size pow(1024$factor));
                  
                  echo 
              $newsize ' ' $sizes[$factor];
              } else {
                  echo 
              '0 B';


              hopka.net!

              Kommentar


              • #8
                Original geschrieben von penizillin
                bei mir klappt die optimierte version ganz gut (obwohl ich nichts über 1 gb testen kann)
                PHP-Code:
                $size filesize('C:\\pdf995\temp.ps');
                $sizes = Array('B''KB''MB''GB''TB''PB''EB');
                $anzahlKuerzel count($sizes);
                $sizegerundet 0
                $ext 
                $sizes[0];
                for (
                $i=1; (($i $anzahlKuerzel) && ($size >= 1024)); $i++) {
                    
                $size $size 1024;
                    
                $ext  $sizes[$i];
                    
                $sizegerundet round($size);
                }
                echo 
                $sizegerundet $ext
                coole Mischung aus englisch/deutsch
                [color=blue]MfG Payne_of_Death[/color]

                [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                [color=red]Merke:[/color]
                [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                Murphy`s Importanst LAWS
                Jede Lösung bringt nur neue Probleme
                Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                Kommentar


                • #9
                  Hopka, zehn punkte!

                  Kommentar

                  Lädt...
                  X