Antworten auf deine Fragen:
Neues Thema erstellen

Datei größen werden falsch ausgegeben

rey

Der Frager ;)

hi,
ich möchte für die auflistung von daten in einer spalte hinter die dateigröße anzeigen.
Die Datei wird mit stat(...) analysiert und anschließend in DB geschrieben in Bytes.
nun möchte ich bei auslesen der daten die datei größe ermitteln
von Bytes -> Yottabyte ;)
leider zeigt es mir alle daten in Bytes an und setzt dahinter ein YP für yottabyte das kann aber nicht sein ;)
PHP:
function byte_umrechner($bytes) {
  if ($bytes > pow(1,3)) {
      if ($bytes >pow(1,24))
      {
      $size = number_format(($bytes / pow(1,24)), 2);
      $size .= " YB";
      return $size;
      }
      elseif ($bytes >pow(10,21))
      {
      $size = number_format(($bytes / pow(10,21)), 2);
      $size .= " ZB";
      return $size;
      }
      elseif ($bytes >pow(10,18))
      {
      $size = number_format(($bytes / pow(10,18)), 2);
      $size .= " EB";
      return $size;
      }
      elseif ($bytes >pow(10,15))
      {
      $size = number_format(($bytes / pow(10,15)), 2);
      $size .= " PB";
      return $size;
      }
      elseif ($bytes >pow(10,12))
      {
      $size = number_format(($bytes / pow(10,12)), 2);
      $size .= " TB";
      return $size;
      }
      elseif ($bytes >pow(10,9))
      {
      $size = number_format(($bytes / pow(10,9)), 2);
      $size .= " GB";
      return $size;
      }
      if ($bytes > pow(10,6)) {
      $size = number_format(($bytes / pow(10,6)), 2);
      $size .= " MB";
      return $size;
    } else {
      $size = number_format(($bytes / pow(10,3)), 2);
      $size .= " KB";
      return $size;
    }
  } else {
    $size = (string) $bytes . " Bytes";
    return $size;
  }
}
 

Rakete

Nicht mehr ganz neu hier

AW: Datei größen werden falsch ausgegeben

Du rechnest falsch um!

Da bekanntermaßen gilt: 1 potenziert mit x ist gleich 1, ergibt auch pow(1,24) genau 1 ... :D

$bytes geteilt durch 1 ergibt - richtig - $bytes :p


Aus dem gleichen Grund springt dein Skript auch immer in den ersten if-Zweig und gibt die dort vermerkte Einheit aus, denn du vergleichst mit "Wenn $bytes > 1". Selbiges Problem hast du auch nochmal in der Zeile darüber, auch pow(1,3) ergibt 1 ...

Aber sag mal: Ist 1KB nicht mehr 1024 Byte? ...du rechnest mit 1000. ;)





 
B

Black6Death12

Guest

AW: Datei größen werden falsch ausgegeben

Hi Rey,

versuchs mal hiermit:
PHP:
function byte_umrechner($bytes) {
    $size = $bytes;
    $exp = 0;
    while ( $size >= 1024 && $exp <= 8 ) {
        $size = $size / 1024;
        $exp ++;
    }
    $size = number_format ( $size, 2 );
    switch ($exp) {
        case 8:
            $size .= ' YB';
            break;
        case 7:
            $size .= ' ZB';
            break;
        case 6:
            $size .= ' EB';
            break;
        case 5:
            $size .= ' PB';
            break;
        case 4:
            $size .= ' TB';
            break;
        case 3:
            $size .= ' GB';
            break;
        case 2:
            $size .= ' MB';
            break;
        case 1:
            $size .= ' KB';
            break;
        default :
        case 0 :
            $size .= ' Bytes';
            break;
    }
    return $size;
}
Läuft vermutlich sogar etwas schneller als deine variante, weil kein pow verwendet wird. Außerdem lässt sich der Faktor einfacher ändern.

Nur ein Vorschlag ...
also Viel Glück damit;)
 

r3nt5ch3r

~ Allround pG ~

AW: Datei größen werden falsch ausgegeben

und das ganze in komprimierter Form (sehr guter Lösungsansatz @ ) und falls es über YB hinausgeht (wow sehr wahrscheinlich^^) dann gibt er die zahl einfach wieder als Byte zurück ('s version tut das nicht xD)...
Außerdem mehr Parameter hinzugefügt, zum Einstellen der Nachkommastellen sowie der Basis mit der umgerechnet wird (manchmal auch 1000 notwendig) => wir wollen ja flexibel bleiben^^
PHP:
function formatFilesize($byte, $precision = 2, $base = 1024) {
    $sizes = array('Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');    
    $sizeIndex = 0;
    $byteStart = $byte;
    while($byte >= $base) {
        $byte /= $base;
        $sizeIndex++;
    }
    
    if(isset($sizes[$sizeIndex]))
        return number_format($byte, $precision) . ' ' . $sizes[$sizeIndex];

    return number_format($byteStart, $precision) . ' ' . $sizes[0];
}
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.487
Neuestes Mitglied
MichaelSEivy
Oben