Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] - Header verfälscht ermittelte Dateigröße (https://www.delphipraxis.net/167210-%5Bphp%5D-header-verfaelscht-ermittelte-dateigroesse.html)

DeddyH 18. Mär 2012 11:19

[PHP] - Header verfälscht ermittelte Dateigröße
 
Ich bastle gerade an einem Download-Script. Dabei ermittle ich die Dateigröße und gebe sie als Header aus. Bei manchen Dateien wird aber im Header eine andere als die ermittelte (und korrekte, mehrfach überprüft) Größe eingetragen. Hat jemand eine Ahnung, was das sein kann? Hier noch der relevante Code:
PHP-Quellcode:
    if (file_exists($filename)){
      header("Content-Type: application/octet-stream");
      header("Content-disposition: attachment; filename=\"".basename($filename)."\"");
      header("Content-Length: ".filesize64($filename)); //hier
      header("Pragma: no-cache");
      header("Expires: 0");  
      readfile($filename);
    }
Ich hatte die Größe auch schon in einer Variablen gespeichert und die dann übergeben, selbes Ergebnis.

himitsu 18. Mär 2012 11:53

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Hast du den Wert von filesize64 mal geloggt oder direkt ausgegeben? Nicht daß dort wirklich eine andere Größe rauskommt.
Das was in die Headern geschrieben wird auch in eine Logatei und dann das vergleichen, was du sendest und was ankommt.

Laß mal das
Delphi-Quellcode:
header("Content-Length: ...
weg, oder überprüfe sonstwie, ob nich ein Server diesen Wert überschreibt, bzw. selbst einträgt.

DeddyH 18. Mär 2012 12:46

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Der Server ist momentan mein eigener Rechner und ja: ich habe den Wert mehrfach überprüft, wie ich bereits schrieb. Das tritt auch nur bei einigen Dateien auf, ich habe keine Ahnung, wieso.

himitsu 18. Mär 2012 13:59

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Bei Dateien die gerade oder vor Kurzem erst erstellt oder verändert wurden?

DeddyH 18. Mär 2012 14:09

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Nö. Das ist anscheinend völlig willkürlich und unabhängig von irgendwelchen Zeitstempeln oder Attributen. Die Dateigröße ist dabei auch wurscht, ich habe im Internet eine Funktion gefunden, die auch mit Dateien > 2 GB zurechtkommt, außerdem hat eine der "falschen" Dateien lediglich eine Größe von 33 MB, wobei im Header dann 178 Byte stehen. Nehme ich z.B. die iso von Win 8, dann stimmt alles. Ich habe also keinerlei Kriterium ermitteln können, wieso das Script (oder eher mein Indianer?) so herumspinnt.

Florian Hämmerle 18. Mär 2012 14:12

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Könnte das Problem an der Windows-Umgebung liegen? Manche PHP Funktionalitäten laufen dort ja nicht so sauber wie sie es auf nem UNIX-System tun.

DeddyH 18. Mär 2012 14:18

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Unmöglich ist nichts, aber bei so etwas Trivialem wie einem Header?

Florian Hämmerle 18. Mär 2012 14:41

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Wäre in der Tat sehr ärgerlich! Kommt es nur bei einer bestimmten Datei vor, oder bei mehreren? Blöde Frage aber 179 Bytes.. könnten eine Verknüpfung sein?

DeddyH 18. Mär 2012 14:51

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Es ist auch keine Verknüpfung. Ich hatte zum Testen zuerst mein eigenes Download-Verzeichnis genommen, dann gedacht, dass ich nur Dateien aus dem "Webspace" zulassen will und daher ein paar zufällig ausgewählte Dateien daraus in das htdocs-Verzeichnis ins neu angelegte Downloads-Verzeichnis kopiert. Der Witz ist ja wirklich: lasse ich mir die ermittelte Dateigröße ausgeben (echo $filesize), dann stimmt es auf das Byte genau, erst wenn ich diese Zahl als Header übermittle habe ich das Problem.

Valle 18. Mär 2012 15:09

AW: [PHP] - Header verfälscht ermittelte Dateigröße
 
Ist ja interessant. Vielleicht versuchst du mal die Reihenfolge der Header zu ändern. Ich würde auch mit Wireshark mal mitschneiden. Eventuell solltest du das Script mal auf einem "richtigen Server" (also kein Windows ;-) ) testen. Versuche doch außerdem mal, die Datentypen richtig zu behandeln und vorher strval() auf die Größe anzuwenden. Außerdem kannst du die Dateigröße mal in eine Variable zwischenspeichern. Und zu guter letzt kannst du ja mal einen anderen Workaround für das 32-Bit-Problem probieren.

Liebe Grüße,
Valentin


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz