php - downloadscript

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

php - downloadscript

Beitrag von monta »

Es gibt ja auch einige hier, die sich mit phph auskennen, vielleicht kann mir jeand weiterhelfen. Ich komm da nicht weiter.

Es geht um das downloadscript von mantis 1.0.3.

Aus Gründen, die ich nicht verstehe, sind heruntergeladene Dateien defekt. Ein Blick in den Hexeditor zeigt, das es sich wohl um das es sich um ein Byte handelt, welches in der heruntergeladenen Datei zusätzlich am Anfang gesetzt wird:

Originaldatei:

Code: Alles auswählen

42 4D 36 C0 00 00 00 00 00 00 36 00 00 00 28 00 00 00 80 00 00 00 80 00 00 00 01 00 18 00 00 00 00 00 00 00 00 00 8C B8 00 00 8C B8 00 00 00 00 usw.


Datei nach download:

Code: Alles auswählen

20 42 4D 36 C0 00 00 00 00 00 00 36 00 00 00 28 00 00 00 80 00 00 00 80 00 00 00 01 00 18 00 00 00 00 00 00 00 00 00 8C B8 00 00 8C B8 00 00 00 00 00  usw.


Aber wo kommt nun das falsche Byte (Space) zu Beginn her bzw. wie kann man dies verhindern.

PS, im Originalforum/Bugtracker schweigt man sich über derart Probleme aus, und alle Einträge im Bugtracker diesbezüglich sind als 'neu' eingetragen, auch wenn sie von letztem Jahr sind...
Dateianhänge
file_download.txt
(3.71 KiB) 55-mal heruntergeladen
Johannes

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: php - downloadscript

Beitrag von Euklid »

monta hat geschrieben:PS, im Originalforum/Bugtracker schweigt man sich über derart Probleme aus, und alle Einträge im Bugtracker diesbezüglich sind als 'neu' eingetragen, auch wenn sie von letztem Jahr sind...


"Lebt" das Projekt noch? Das wäre ja ein ziemlich offensichtlicher Bug...

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Natürlich lebt es und in den von mir eingesetzten Versionen tritt das auch nicht auf. Im FPC/Lazarus Bugtracker auch nicht. Was für eine Alpha Version benutzt du denn ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ja, mantis lebt natürlich.

ich hab auch bei anderen geschaut, da gibts keine Probleme, und ich nutze keine besondere Version aus dem CVS sondern das letzte Entwicklungsrelaese 1.1.0a3. Aber die läuft bei anderen Projekten scheinbar ohne Probleme. (Siehe mantiseigener Bugtracker) Ich kann höchstens die CVS-Version mal probieren.

Ich vermute, das es an nem falsch gesendeten Header liegt, nur damit kenn ich mich nicht wirklich gut aus. Textdateien lassen sich auch öffnen, da scheint das zusätzliche Leerzeichen nicht zu stören, aber Archive und Bilder sind natürlich defekt, somal ja auch ein Byte am Ende dafür wegfällt.

@Christian, was hast du denn, 1.0.x oder 1.1.x?

die 1.0.xer Versionen nützen mir nichts, weil ich gerne die Roadmap hätte, darum hab ich die gar nicht probiert.
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

1.0.2
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

ah, aber die hat halt noch keine Roadmap drin.

Ich hab den Fehler gefunden, oder anders ausgedrückt, zumindest umgangen. Ich frag mich allerdings, ob kein anderer das Problem hat.
Falls jemand mal in die selbe Verlegenheit kommt:

Es wird genau ein Leerzeichen vor dem Header ausgegeben, was die Datei zerstört, allerdings keinen Fehler ausgibt. Umgehen kann man dies einfach, indem man als folgendes als erste und letzte Anweisung in die Datei file_download.php schreibt:

Code: Alles auswählen

<?php
ob_start();
 
...
 
ob_end_flush();
   exit();
?>


Zur Erklärung: verbraucht zwar etwas mehr Ressourcen, allerdings wird so die gesamte Ausgabe zwischengespeichert und erst bei ob_end_flush automatisch der Header als erstes gesendet und das Leerzeichen fehlt nicht ins Gewicht.
Das Leerezichen entsteht vermutlich bei require_once(); und der Ausgabepuffer wird scheinbar mit ob_end_clean(); nicht erfolgreich wieder gelöscht.
Johannes

Antworten