PHP Download Header schon gesendet

schoaschi

Grünschnabel
Hallo,

habe ein Problem und zwar möchte ich in einer Unterseite einer PHP Seite (also zB. index.php?menu=3&sidebar=2) eine Datei zum Download anbieten.

Mit ist klar dass ich die Header schon gesendet habe und das über diese jetzt nicht mehr machen kann. Weiteres Problem ist, dass ich auf keinen Fall will, dass der Link zur Datei, also der Verzeichnispfad sichtbar ist, was bei allen Alternativen so ist, wenn man über den Link zum Download fährt.

Was ich schon versucht habe:
-Link zu einer Download.php, wo neue Header stehen.
Problem: In der Download.php muss ich einen festen Pfad für die Datei angeben, also müsste ich für jede Datei die ich anbieten will eine eigene Download.php machen.
-Header in den Code der durch index.php?menu=3&sidebar=2 includiert wird.
Problem: Header bereits gesenedet
-Header da eingefügt wo er gesendet wird
Problem: jetzt wird absolut jeder Link zum Download Link und man kann nicht mehr auf der Seite navigieren.


Anfangs wollte ich auf JS verzichten aber mittlerweile ist mir eigentlich jedes Mittel oder jede Alternative recht, wie man das lösen könnte.


Danke für die Antworten
 
Du könntest auf der oben genannten Seite ein Formular einbinden, zb.:


HTML:
<form action="function.php?blablub" method="post">
<input type="submit" value="Download">
</form>

In der Ziel-Funktion setzt du das:

PHP:
        header ('Content-type: application/zip');
        header ('Content-Disposition: attachment; filename="datei_zum_download.zip"');
        header ('Content-Description: File - Download');
        header ('Accept-Ranges: bytes');
        header ('Content-Length: ' . filesize (datei_zum_download.zip));
        header ('Pragma: no-cache');
        header ('Expires: 0');

Sollte eigentlich so gehen
 
Ok damit wird der Link nicht mehr angezeigt aber wie löse ich das Problem, dass ich nicht für jede Datei eine download.php haben will? Kann ja dem Formular keine Info mitgeben, die ich dann in der Download Datei als Variable für den Pfad hätte....
 
mach doch anstatt <input type="submit" value="Download"> einfach <button type="submit" name="filename" value="dateiname.xyz">Download</button>
dann kannst du bei der Zieldatei den Dateinamen über die Variable $_POST["filename"] ziehen
 
du kannst ja eine ID übergeben anstatt eines namens, und in der Zieldatei ist dann ein Array in dem zu den IDs die Files stehen (falls es mehrere Files sind). Eine andere Möglichkeit wäre den Filenamen zu verschlüsseln und in der Zieldatei wieder zu entschlüsseln.
 
Problem dabei ist, dass jeder User seinen eigenen Ordner hat und dies dann natürlich im Pfad ist. Deswegen will ich auch dass der Pfad nicht sichtbar ist, weil die User ID drin steht. Jetzt wenn ich den Pfad verschlüssel hab ich in der Zieldatei das Problem, dass ich nicht weiß welcher User downloaden will, also habe ich nicht die User ID damit ich den Pfad wieder entschlüsseln könnte.
 
Hi schoaschi,

wenn ich dich richtig verstehe möchtest Du so etwas wie ein Download-Script, das den tatsächlichen Pfad der Datei versteckt.
Das ist eigentlich ganz einfach, besonders wenn Du den Dateinamen nicht verbergen möchtest, sondern nur den Pfad zur Datei.
Denn der Name nützt einem alleine ja nichts.

Schau Dir mal folgendes Tutorial von SelfPHP an:

Dateidownload mit PHP


Wenn Du das PHP-Skript die Datei an den Browser ausgeben läßt, wird kein Pfad zur Download-Datei im Quelltext angezeigt.

Ich bin mir ziemlich sicher, das wir hier im Forum aber auch bereits einige Beiträge zu dem Thema hatten (Suchbegriffe: PHP Download Script).

Gruß

Neuro
 
Jetzt jetzt funktioniert zwar der Link und auch das Downloadfenster geht auf aber leider kann ich die Bilder danach nicht öffnen: Das Bild kann nicht geöffnet werden, da das Dateiformat nicht in der Fotoanzeige unterstützt wird ider die aktuellen Updates für die Fotoanzeige fehlen....
 
Zurück