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-Key: 89059

Url: https://administrator.de/contentid/89059

Printed on: April 23, 2024 at 06:04 o'clock

Member: EvilMoe
EvilMoe Jun 03, 2008 at 19:44:11 (UTC)
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
?>
Member: ThorstenFritz
ThorstenFritz Jun 03, 2008 at 20:09:25 (UTC)
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.
Member: EvilMoe
EvilMoe Jun 03, 2008 at 20:53:18 (UTC)
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
Member: ThorstenFritz
ThorstenFritz Jun 04, 2008 at 04:14:00 (UTC)
Goto Top
Hallo EvilMoe,

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