thorstenfritz
Goto Top

Filesize liefert falsche größe

Problem mit der Funktion Filesize bei Dateien größer 5GB.

Hallo zusammen,

wie schon eingangs beschrieben liefert mit die Funktion filesize eine flaschen wert. Das aber auch nur bei Dateien (.zip) die ca. 5GB oder größer sind. Nachdem ich etwas gesucht habe, bin ich auf den Hinweis gestoßen die Funktion filesize() mit sprintf("%u", filesize($filename)) zu formatieren. Leider geht das nur mit Dateien zwischen 2GB und 4GB. Hat da jemand einen Tip für wie ich das Problem lösen kann oder gibt es eine andere Möglichkeit die Dateigröße zu ermitteln? Für Hilfe wäre ich dankbar.

apache 1.3
php 5.2.6

Mit freundlichen Grüßen
Thorsten

Content-ID: 89059

Url: https://administrator.de/forum/filesize-liefert-falsche-groesse-89059.html

Ausgedruckt am: 22.04.2025 um 03:04 Uhr

EvilMoe
EvilMoe 03.06.2008 um 21:44:11 Uhr
Goto Top
Ich benutze dafür immer diese Funktion.
<?php
function viewsize($size){
      $kb = 1024;
      $mb = 1024 * $kb;
      $gb = 1024 * $mb;
      $tb = 1024 * $gb; 
      
      if($size < $kb)
         return $size.' B';  
      if($size < $mb)
         return round($size/$kb,2).' KB';  
      if($size < $gb)
         return round($size/$mb,2).' MB';  
      if($size < $tb)
         return round($size/$gb,2).' GB';  
      return round($size/$tb,2).' TB';  
   } // function - viewSize
?>
ThorstenFritz
ThorstenFritz 03.06.2008 um 22:09:25 Uhr
Goto Top
Hallo EvilMoe,

danke für deine Antwort, aber ich glaube das kann ich leider nicht verwenden.

Ich hole mal kurz aus.

Wenn ich mit der Funktion filesize($file) die Größe eine Datei feststellen möchte die als Zip File eine Größe von 5.4GB hat, liefert mir die Funktion nur einen Wert von 1.4GB und somit eine falsche Ausgangsgröße.

Deshalb glaube ich das ich deinen Vorschlag nicht verwenden kann, oder ich verstehe mal gerade nichts bzw. wie wird die Variable $Size in deinem Code gefüllt.

Ich brauche die genaue Dateigröße für einen Download. Ich habe die Syntax gerade nicht genau im Kopf, aber die Dateigröße wird mit der header(content-filesize .... ) Funktion gesetzt.
EvilMoe
EvilMoe 03.06.2008 um 22:53:18 Uhr
Goto Top
Sorry dann hatte ich dich falsch verstanden. Ich konnte bei php.net einiges drüber finden. Am besten probierst du selber mal einiges aus und gibst uns dann eine Rückmeldung.

http://de.php.net/filesize

Fand sowas zb. interessant vielleicht gehts ja.
the fastest way to get the correct filesize in windows an linux would be this:

<?php
  echo sprintf("%u", filesize($file));  
?>

It prints the result of filesize as UNSIGNED INT so it can be until 4GB.
The reason is, SIGNED INT runs until 2GB and flips to -2GB watch following:

file<2GB      = SIGNED:  1048576512 UNSIGNED: 1048576512
file>2GB      = SIGNED: -2100140103 UNSIGNED: 2194827193
file<4GB      = SIGNED:  -100662784 UNSIGNED: 4194304512

p.s. I found this at: http://www.php.net/manual/en/function.filesize.php
ThorstenFritz
ThorstenFritz 04.06.2008 um 06:14:00 Uhr
Goto Top
Hallo EvilMoe,

danke für deine Antwort, ich werd mal schauen ob ich etwas brauchbares finden kann. Melde mich dann.