Ich muss demnächst für einen Freund eine Website bauen, in der auch eine downloadbare PDF enthalten ist.
Wie mache ich es, dass wenn ich auf den Download Link klicke, sich eine neue Seite öffnet und(!) im selben Moment sich der Downloaddialog des Browsers öffnet?
Kann man erzwingen, das eine Datei gedownloaded wird (auch wenn es zb eine php oder html datei ist)?
Ok, ich hätte gedacht, das der nachfolgende Inhalt dann nicht ausgegeben wird, nachdem ich header(‚location: …‘) aufgerufen habe.
Naja, probieren geht über studieren…
Da gibst du ebenfalls per header einen Medientyp an, den der
browser nicht kennt oder nicht zu interpretieren bereit ist, das
kein ein ‘application/octet-stream’ sein oder irgendwas, was
der browser nicht kennt, etwa ‘application/x-download’, dann
sollte ein Dialogfenster erscheinen, wo der Nutzer gefragt
wird, was er mit dem Kram anfangen will. Man kann da wohl
auch einen Vorschlag für den Dateinamen mitgeben.
Im PHP-Handbuch gibt es da wohl auch ein Beispiel.
am besten löst du das mit einer PHP-Datei, die den Download startet:
<?php
//Typ des Dokuments
header('Content-type: application/pdf');
//Als Inhalt.pdf zum Download anbieten
header('Content-Disposition: attachment; filename="Inhalt.pdf"');
//Datei auf dem Server lesen
readfile('content_1.pdf');
Der vorteil ist, dass du einen Dateinamen und den Typ des Inhalts mitgeben kannst, wodurch dem Browser nicht alle Möglichkeiten genommen werden (d.h. auch direktes Öffnen mit einem Programm möglich ist)
Ich wuerd’ auf die HTML-Seite verlinken, die du anzeigen willst - und darin dann mit leichter Verzoegerung per Meta-Refresh auf die PDF-Resource verweisen.
[code]<?php
//Typ des Dokuments
header(‘Content-type: image/gif’);
//Als Inhalt.pdf zum Download anbieten
header(‘Content-Disposition: attachment; filename=“test.gif”’);
//Datei auf dem Server lesen
readfile(‘jwl_animation_2.gif’);
?>[/code]
und die Grafik ‘jwl_animation_2.gif’ (siehe Signatur).
Firefox bietet mir die Datei zwar zum Download an, die seite mit dem Halllllo kriege ich aber nicht angezeigt…
Da wirst du dem browser etwas Experimentelles unterschieben
müssen, was zwar nicht im HTTP definiert ist, in der Praxis doch
aber bereits seit dem letzten Jahrtausend funktioniert.
Was man auch ins meta-Element schreiben kann, kann man
natürlich auch direkt im header versenden - basiert dann auf
Freiwilligkeit, ob der browser das interpretiert oder nicht.
header(‘refresh: 20; url=jwl_animation_2.php’);
statt des location headers senden.
Da es zwar praktisch bei den bekannten browsern funktioniert,
aber nicht spezifiziert ist, sollte man außerdem innerhalb von
downtest.php aber immer einen Verweis angeben, den der Nutzer
anklickern kann, wenn der browser sich diesem Ansinnen
verweigern sollte.
Ob das im gleichen Fenster geöffnet wird oder anders interpretiert,
hängt dann wiederum davon ab, ob der browser etwas damit
anfangen kann, was im header der aufgerufenen Datei steht,
denke ich mal.
Obigen header verwende ich jedenfalls recht erfolgreich bei
SVG-Ausgaben, wo es das auch HTML bekannte meta-Element so
nicht gibt, bei XHTML funktioniert das auch nicht zwangsläufig, da
sollte man das dann wohl auch so senden.
[quote=“hoffmann”]Obigen header verwende ich jedenfalls recht erfolgreich bei
SVG-Ausgaben, wo es das auch HTML bekannte meta-Element so
nicht gibt, bei XHTML funktioniert das auch nicht zwangsläufig, da
sollte man das dann wohl auch so senden.[/quote]
Der w3c validator hat gegen so eine XHTML Zeile jedoch nichts einzuwenden…