Datei download
Michael
- php
Hallo und guten Morgen,
ich habe ein riesen Problem:
ich will eine Datei herunterladen und diese soll auf Festplatte gespeichert werden über das Fenster "Speichern unter".
der Programcode lautet:
header("Content-type: application/force-download");
header("Content-Disposition: filename=$Datei");
header("Content-Description: Downloaded File");
readfile ($dir2.$Datei);
$dir2 = Pfadangabe: http://www.xyz.de/Pfad/
$Datei = Dateiname
wenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Ich hoffe Ihr könnt mir helfen
Hallo,
Hallo und guten Morgen,
ich habe ein riesen Problem:
Teste es doch schrittweise. U.a. hängt das auch an der Dateiendung, aber auch am Contenttype. Wieso muss es denn über PHP laufen? Bei einem Word.doc zB. kommen Apache und Browser gut selbst miteinander klar.
Gruß
jobo
Hallo,
Hallo und guten Morgen,
ich habe ein riesen Problem:
Teste es doch schrittweise. U.a. hängt das auch an der Dateiendung, aber auch am Contenttype. Wieso muss es denn über PHP laufen? Bei einem Word.doc zB. kommen Apache und Browser gut selbst miteinander klar.
es sind zip-Dateien gleichzeitig wird in einer Datenbank festgehalten wann und was heruntergalden wurde (dies funktioniert).
Egal was ich mache, es werden immer die undefineirten Zeichen angezeigt anstatt das Dialog-Fenster "speichern unter".
Gruß Michael
Hello,
Egal was ich mache, es werden immer die undefineirten Zeichen angezeigt anstatt das Dialog-Fenster "speichern unter".
Das liegt aber eventuell auch an der Client-Einrichtung.
Bei mir öffnet sich immer der Editor (Text-Pad), wenn ich den Download nur per Click auf den Link einer Zip-Ressource starte. Per Kontextmenu kann man den Download zwar gezielt in eine Datei leiten, aber es nervt trotzdem. Ich wollte auch immer noch herausfinden, durch welche Installation das gekommen ist und habe es daher noch nicht rückgängig gemacht. In Verdacht habe ich Adobe und Firefox. Es hat schließlich mal wunschgemäß funktioniert.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Egal was ich mache, es werden immer die undefineirten Zeichen angezeigt anstatt das Dialog-Fenster "speichern unter".
Das liegt aber eventuell auch an der Client-Einrichtung.
Bei mir öffnet sich immer der Editor (Text-Pad), wenn ich den Download nur per Click auf den Link einer Zip-Ressource starte. Per Kontextmenu kann man den Download zwar gezielt in eine Datei leiten, aber es nervt trotzdem. Ich wollte auch immer noch herausfinden, durch welche Installation das gekommen ist und habe es daher noch nicht rückgängig gemacht. In Verdacht habe ich Adobe und Firefox. Es hat schließlich mal wunschgemäß funktioniert.
In IE, Opera, Safari treten die Probleme auch auf
Gruß Michael
Hello,
ich will eine Datei herunterladen und diese soll auf Festplatte gespeichert werden über das Fenster "Speichern unter".
der Programcode lautet:
header("Content-type: application/force-download");
header("Content-Disposition: filename=$Datei");
header("Content-Description: Downloaded File");readfile ($dir2.$Datei);
$dir2 = Pfadangabe: http://www.xyz.de/Pfad/
$Datei = Dateinamewenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Ich hoffe Ihr könnt mir helfen
Und wie lauten die ersten dieser "undefinierten Zeichen"?
Funktionieren denn deine übrigen PHP-Scripte einwandfrei?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
ich will eine Datei herunterladen und diese soll auf Festplatte gespeichert werden über das Fenster "Speichern unter".
der Programcode lautet:
header("Content-type: application/force-download");
header("Content-Disposition: filename=$Datei");
header("Content-Description: Downloaded File");
readfile ($dir2.$Datei);
$dir2 = Pfadangabe: http://www.xyz.de/Pfad/
$Datei = Dateiname
es sind zip-Dateien
wenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Ich hoffe Ihr könnt mir helfenUnd wie lauten die ersten dieser "undefinierten Zeichen"?
Funktionieren denn deine übrigen PHP-Scripte einwandfrei?
ja, der Resr läuft einwandfrei.
Gruß Michael
Hello,
es sind zip-Dateien
Ich hatte eine BOM in Verdacht. Aber es sieht eher so aus, als ob Dein Browser (welcher ist es?) die Ressource als text/plain darzustellen versucht...
Hast Du mal einen anderen Browser versucht?
Und was sagt das System (welches ist es? Win XP?) in seiner Assoziations-Einrichtung?
(WinXP: Extras/Ordneroptionen/Dateitypen)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
es sind zip-Dateien
Ich hatte eine BOM in Verdacht. Aber es sieht eher so aus, als ob Dein Browser (welcher ist es?) die Ressource als text/plain darzustellen versucht...
Hast Du mal einen anderen Browser versucht?
Und was sagt das System (welches ist es? Win XP?) in seiner Assoziations-Einrichtung?
(WinXP: Extras/Ordneroptionen/Dateitypen)
Habe es in verscheidenen Browser und Win2000 und XP ausprobiert -> alles das gleiche!
Gruß Michael
Hello,
Habe es in verscheidenen Browser und Win2000 und XP ausprobiert -> alles das gleiche!
Dann schau Dir mal die Response-Headers an.
Geht ja bei Firefox recht bequem mit der Headers Extension
https://addons.mozilla.org/en-US/firefox/addon/3829
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Und wie lauten die ersten dieser "undefinierten Zeichen"?
es sieht so aus, als ob du erst die Zeilen
TESCHT
Email: abc@abc.abc
Datei: ReadmeS7.zip
http://www.mattke.de/Eingang/Download/Software/Programmbeispiele/ReadmeS7.zip
http://www.mattke.de/Eingang/Download/Software/Programmbeispiele/ReadmeS7.zip
ausgibst, und danach erst versuchst, deine Header zu senden und die Datei, die man zum Download ausgewählt hat. Das geht natürlich nicht: Mit der ersten Ausgabe von Nutzdaten (hier: der String "TESCHT") werden die bis dahin entweder von dir oder von PHP als Default vorgemerkten Header gesendet und der Datenblock begonnen.
Später gesendete Header können nicht mehr berücksichtigt werden und werden von PHP ignoriert. Mit einer sinnvollen Einstellung des Error Reporting würdest du auch die zugehörigen Warnungen sehen, wie ich schon beschrieben habe.
Was schwebt dir überhaupt für eine Logik vor, Textausgaben und zip-Download zu mischen? Entweder das eine, oder das andere.
So long,
Martin
TESCHT
Email: abc@abc.abc
Datei: ReadmeS7.zip
http://www.mattke.de/Eingang/Download/Software/Programmbeispiele/ReadmeS7.zip
http://www.mattke.de/Eingang/Download/Software/Programmbeispiele/ReadmeS7.zipausgibst, und danach erst versuchst, deine Header zu senden und die Datei, die man zum Download ausgewählt hat. Das geht natürlich nicht: Mit der ersten Ausgabe von Nutzdaten (hier: der String "TESCHT") werden die bis dahin entweder von dir oder von PHP als Default vorgemerkten Header gesendet und der Datenblock begonnen.
Später gesendete Header können nicht mehr berücksichtigt werden und werden von PHP ignoriert. Mit einer sinnvollen Einstellung des Error Reporting würdest du auch die zugehörigen Warnungen sehen, wie ich schon beschrieben habe.Was schwebt dir überhaupt für eine Logik vor, Textausgaben und zip-Download zu mischen? Entweder das eine, oder das andere.
Die Anzeige sind nur dazu gedacht zur Kontrollanzeige, im eigentlichen Betrieb sollen die auch nicht mehr zusehen sein.
Dann werd ich es ohne Anzeige mal ausprobieren uns sehen was passiert.
Gruß Michael
Moin,
header("Content-type: application/force-download");
diesen Content-Type gibt es nicht - meintest du vielleicht application/octet-stream? Die HTTP-Spezifikation sagt zwar aus, dass ein Client bei einem ihm unbekannten Content-Type selbst entscheiden kann, wie er die Ressource verarbeitet, und die meisten UAs werden sie wohl zum Speichern anbieten. Aber warum nicht gleich richtig?
header("Content-Disposition: filename=$Datei");
Da fehlt was: Content-Disposition: attachment; filename=$Datei
header("Content-Description: Downloaded File");
Kann man machen, ist aber sehr ungewöhnlich. Ich würd's weglassen.
readfile ($dir2.$Datei);
wenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Macht dein Script etwa vor den header-Anweisungen schon irgendeine Ausgabe, und sei es eine Leerzeile? Das würde dann dazu führen, dass keine Header mehr gesendet werden. Dann solltest du allerdings auch eine Meldung (Warning) bekommen: Headers already sent.
So long,
Martin
Moin,
header("Content-type: application/force-download");
diesen Content-Type gibt es nicht - meintest du vielleicht application/octet-stream? Die HTTP-Spezifikation sagt zwar aus, dass ein Client bei einem ihm unbekannten Content-Type selbst entscheiden kann, wie er die Ressource verarbeitet, und die meisten UAs werden sie wohl zum Speichern anbieten. Aber warum nicht gleich richtig?
header("Content-Disposition: filename=$Datei");
Da fehlt was: Content-Disposition: attachment; filename=$Datei
header("Content-Description: Downloaded File");
Kann man machen, ist aber sehr ungewöhnlich. Ich würd's weglassen.
readfile ($dir2.$Datei);
wenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Macht dein Script etwa vor den header-Anweisungen schon irgendeine Ausgabe, und sei es eine Leerzeile? Das würde dann dazu führen, dass keine Header mehr gesendet werden. Dann solltest du allerdings auch eine Meldung (Warning) bekommen: Headers already sent.
So long,
Martin
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Eine Warnung bekomme ich keine.
Habe die oben aufgeführten Änderungen gemacht -> das gleiche Problem.
Hello,
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Eine Warnung bekomme ich keine.Habe die oben aufgeführten Änderungen gemacht -> das gleiche Problem.
Ist der Webserver öffentlich? Dann gib uns doch mal einen Link auf eine Musterressource, die bei Dir entsprechend deiner Beschreibungen verarbeitet wird.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Eine Warnung bekomme ich keine.Habe die oben aufgeführten Änderungen gemacht -> das gleiche Problem.
Ist der Webserver öffentlich? Dann gib uns doch mal einen Link auf eine Musterressource, die bei Dir entsprechend deiner Beschreibungen verarbeitet wird.
zum tsten:
http://www.mattke.de/Eingang/Login/Login.php
benutzer: abc@abc.abc
passwort: abc
-> Programmbeispiele und dort eines aussuchen.
Gruß Michael
Hello,
da kommt auf den Request auf
http://www.mattke.de/Eingang/Login/Liste_Prg_Beispiele.php?do=download&Datei=ReadmeS7.zip
GET /Eingang/Login/Liste_Prg_Beispiele.php?do=download&Datei=ReadmeS7.zip HTTP/1.1
Host: www.mattke.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.6,en;q=0.4,fr-fr;q=0.2
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.mattke.de/Eingang/Login/Liste_Prg_Beispiele.php
Cookie: PHPSESSID=e61bd1fa0eb77066d6ab0179b39ca1bd
HTTP/1.x 200 OK
Date: Wed, 18 Nov 2009 10:26:40 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/4.4.9
Keep-Alive: timeout=2, max=200
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
Von deinen Headern ist da nichts zu sehen.
Der übermittelte Content löast dann auch noch Folgerequests aus.
Das angesprochene Script scheint das wohl zu vergessen:
Liste_Prg_Beispiele.php?do=download&Datei=ReadmeS7.zip
Sieht sowieso irgendwie gefährlich aus, dass der Dateiname da im Klartext drinsteht. Da kommen bei mir immer Vermutungen auf, dass man x-beliebige Dateien runterladen könnte...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
»
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Eine Warnung bekomme ich keine.
sind warnungen eingeschaltet? wird vorher ein blank (bom) ausgegeben?
Gruß
jobo
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Und genau diese Bildschirmausgabe verhindert dein Download.
Hello,
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Und genau diese Bildschirmausgabe verhindert dein Download.
Das angesprochene Script macht aber nicht das, was Michael uns hier gepostet hat. Von den vorgesehen Headern wird kein einziger gesendet!
siehe https://forum.selfhtml.org/?t=192771&m=1286889
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Das angesprochene Script macht aber nicht das, was Michael uns hier gepostet hat. Von den vorgesehen Headern wird kein einziger gesendet!
Richtig, kann ja auch gar nicht, da vor dem header() bereits Daten zum Client gesendet wurden.
Hello,
Das angesprochene Script macht aber nicht das, was Michael uns hier gepostet hat. Von den vorgesehen Headern wird kein einziger gesendet!
Richtig, kann ja auch gar nicht, da vor dem header() bereits Daten zum Client gesendet wurden.
Dann müsste das Script mit einer Fehlermeldung reagieren, wenn die nicht alle ausgeschaltet sind.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Dann müsste das Script mit einer Fehlermeldung reagieren, wenn die nicht alle ausgeschaltet sind.
In diesem Fall sind diese augenscheinlich alle abgeschaltet.
Hallo,
Was für eine Ausgabe? Wenn dann Bildschirmanzeige mit den Dateien die man herunterladen will.
Und genau diese Bildschirmausgabe verhindert dein Download.
Entweder Bildschirmausgabe, oder Download. Ein Link verweist auf eine Resource, die entweder im Browser angezeigt wird, oder von ihm heruntergeladen wird. Wenns hyroglyphen sind, wird vielleicht die Zip-Datei angezeigt.
Gruß
jobo
Hi,
Entweder Bildschirmausgabe, oder Download.
Ein Link verweist auf eine Resource, die entweder im Browser angezeigt wird, oder von ihm heruntergeladen wird. Wenns hyroglyphen sind, wird vielleicht die Zip-Datei angezeigt.
Ja. Die Zeichen "PK" markieren den Beginn des zip-Archivs.
Ciao,
Martin
Hallo und guten Morgen,
ich habe ein riesen Problem:
ich will eine Datei herunterladen und diese soll auf Festplatte gespeichert werden über das Fenster "Speichern unter".
der Programcode lautet:
header("Content-type: application/force-download");
header("Content-Disposition: filename=$Datei");
header("Content-Description: Downloaded File");readfile ($dir2.$Datei);
$dir2 = Pfadangabe: http://www.xyz.de/Pfad/
$Datei = Dateinamewenn ich es so mache, dann werden nur undefinierte Zeichen auf den Bildschirm ausgegeben.
Ich hoffe Ihr könnt mir helfen
Hier ist der Test-Zugang:
http://www.mattke.de/Eingang/Login/Login.php
benutzer: abc@abc.abc
passwort: abc
-> Programmbeispiele und dort eines aussuchen.
Hallo Michael,
Neben dem was im restlichen Thread schon geschrieben wurde:
readfile ($dir2.$Datei);
$dir2 = Pfadangabe: http://www.xyz.de/Pfad/
$Datei = Dateiname
Warum greifst du per http auf die Datei zu wenn du doch direkt über das Dateisystem darauf zugreifen könntest?
Gruß,
Tobias
Hello Tobias,
Neben dem was im restlichen Thread schon geschrieben wurde:
readfile ($dir2.$Datei);
$dir2 = Pfadangabe: http://www.xyz.de/Pfad/
$Datei = DateinameWarum greifst du per http auf die Datei zu wenn du doch direkt über das Dateisystem darauf zugreifen könntest?
Das ist überhaupt wahr!
Genau DAS will er ja gerade NICHT.
Und bei der Gelegenheit nochmals daran erinnert, dass $Datei, die ja von außen kommt, auf jeden Fall vorbehandelt werden muss, wenn Michael sich nicht eine Sicherheitslücke ins System reißen will.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg