Bei Datei-Download gleichzeitig neue Datei öffnen

Hallo.

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)?

thx wie immer im vorraus

jw-lighting

du verlinkst auf die neue Seite, und die leitet dann automatisch auf die PDF-Datei weiter. Dann bleibt die 2te Seite geöffnet :wink:

Am einfachsten geht das mit PHP, wenn du einfach den Dateinamen als ?id angibst

<?php
if(!empty($_GET['id']))
   header("location: ".$_GET['id']);
?>
<!DOCTYPE ...

eine Überprüfung der ID wäre auch noch gut :wink:

Ok, ich hätte gedacht, das der nachfolgende Inhalt dann nicht ausgegeben wird, nachdem ich header(‚location: …‘) aufgerufen habe. !coffee
Naja, probieren geht über studieren… :stress:

Und wie kann man ein Datei Download erzwingen? :unamused:

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.

de.php.net/manual/de/function.header.php

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)

Na das nehm ich auch mal stark an …

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.

Sorry, das ist aber nicht was ich will.

Recht hast du wohl trotzdem:

Habe folgende Datein:

downtest.php:

<?php
header('Location: jwl_animation_2.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
   <title>Downtest</title>
  </head>
  <body>
Hallllllllo...
  </body>
</html>

jwl_animation_2.php:

[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.

ok, werde es dann testen, vielen dank für eure hilfe!

[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…