mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mi 24.04.2024 06:16 Benutzername: Passwort: Auto-Login

Thema: PHP Download erzwingen, Datei-Header kaputt vom 16.03.2012


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP Download erzwingen, Datei-Header kaputt
Autor Nachricht
SimonDerDude
Threadersteller

Dabei seit: 15.01.2010
Ort: error: undefined
Alter: 35
Geschlecht: Männlich
Verfasst Fr 16.03.2012 10:04
Titel

PHP Download erzwingen, Datei-Header kaputt

Antworten mit Zitat Zum Seitenanfang

So, der Titel ist schonmal Suchmaschinenoptimiert *bäh*
Ich habe nach Vorlage von php-faq.de einen Datei Download umgesetzt und freue mich dass dieser sogar im IE 8 funktioniert.
Jedoch kann die heruntergeladene Datei nicht ausgeführt/geöffnet werden da der Datei Header scheinbar nicht korrekt ist. Es handelt sich hier um einfache .jpg Dateien.

Hier mein Code in einer separaten Datei:
Code:

<?php
   // Parameter "file" zum Aufruf des Scripts setzen (download.php?file=datei).
   $download = $_GET['file'];
   
   // Bilder-Verzeichnis festlegen.
   $basedir = "http://www.url-zensiert.de/ordner/profilbilder/";
   
   // Übersetzung von Download-Bezeichner in Dateinamen.
   $filelist = array(
     "bild1" => "bild.jpg",
     "bild2" => "bild2.jpg",
     "bild3" => "bild3.jpg",
     "bild4" => "bild4.jpg",
     "bild5" => "bild5.jpg",
     "bild6" => "bild6.jpg",
    
     "anderes1" => "anderes.jpg",
     "anderes2" => "anderes1.jpg",
     "anderes3" => "anderes2.jpg",
     "anderes4" => "anderes3.jpg",
     "anderes5" => "anderes4.jpg" // Letzte Datei => Komma-Regel beachten
   );
   
   // Error abfangen.
   if (!isset($filelist[$download]))
     die("Datei $download nicht vorhanden.");
   
   // Vertrauenswürdigen Dateinamen erstellen.
   $filename = sprintf("%s/%s", $basedir, $filelist[$download]);
   
   // Passenden Datentyp erzeugen.
   header("Content-Type: application/octet-stream");
   
   // Passenden Dateinamen im Download-Fenster vorgeben.
   $save_as_name = basename($filelist[$download]);
   header("Content-Disposition: attachment; filename=\"$save_as_name\"");
   
   // Datei ausgeben.
   readfile($filename);
?>

Der Aufruf in einer anderen Datei:
Code:
<a href="../technik/download.php?file=bild1" title="Diese Datei herunterladen"><img/></a>


Ich habe auch schon application/force-download versucht jedoch ohne Erfolg. Hat jemand Erfahrungen damit gemacht / sollte ich besser ein anderes Script nutzen?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
zweitaccount

Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 16.03.2012 10:10
Titel

Antworten mit Zitat Zum Seitenanfang

Moin, also bei jpgs ist ein "Content-Type: image/jpg" immer recht sinnvoll.

Grüße
zweitaccount
  View user's profile Private Nachricht senden
Anzeige
Anzeige
SimonDerDude
Threadersteller

Dabei seit: 15.01.2010
Ort: error: undefined
Alter: 35
Geschlecht: Männlich
Verfasst Fr 16.03.2012 10:13
Titel

Antworten mit Zitat Zum Seitenanfang

zweitaccount hat geschrieben:
Moin, also bei jpgs ist ein "Content-Type: image/jpg" immer recht sinnvoll.

Habe ich gerade versucht, Fireworks meldet unbekannten Datei-Typ Au weia!
> Sende gerne den Link per PN


Zuletzt bearbeitet von SimonDerDude am Fr 16.03.2012 10:14, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
zweitaccount

Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 16.03.2012 10:29
Titel

Antworten mit Zitat Zum Seitenanfang

Ups sorry - jpeg müsste es heißen anstatt jpg:
"Content-type: image/jpeg"
  View user's profile Private Nachricht senden
SimonDerDude
Threadersteller

Dabei seit: 15.01.2010
Ort: error: undefined
Alter: 35
Geschlecht: Männlich
Verfasst Fr 16.03.2012 10:49
Titel

Antworten mit Zitat Zum Seitenanfang

Schon klar Grins Ich versuch gerade noch den header genauer zu definieren.
Wenns alles nicht hilft .zip ich einfach alles dann läuft das automatisch (denke ich) *ha ha*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
SimonDerDude
Threadersteller

Dabei seit: 15.01.2010
Ort: error: undefined
Alter: 35
Geschlecht: Männlich
Verfasst Fr 16.03.2012 11:52
Titel

Antworten mit Zitat Zum Seitenanfang

Lösung
Ich weiß nicht zu 100% woran es lag, vermute aber dass der Pfad zu den Bildern durch den Aufruf per HTTP nicht korrekt ausgeführt werden konnte (zudem war hinten ein Slash zu viel dran).

Habe nun einen absoluten Pfad zum Verzeichnis verwendet.
Der Content-Type ist auf image/jpeg zu setzen.

Code:
Code:

<?php
   // Parameter "file" zum Aufruf des Scripts setzen (download.php?file=datei).
   $download = $_GET['file'];
   
   // Bilder-Verzeichnis festlegen.
   $basedir = "../ordner/profilbilder";
   
   // Übersetzung von Download-Bezeichner in Dateinamen.
   $filelist = array(
     "bild1" => "bild.jpg",
     "bild2" => "bild2.jpg",
     "bild3" => "bild3.jpg",
     "bild4" => "bild4.jpg",
     "bild5" => "bild5.jpg",
     "bild6" => "bild6.jpg",
   
     "anderes1" => "anderes.jpg",
     "anderes2" => "anderes1.jpg",
     "anderes3" => "anderes2.jpg",
     "anderes4" => "anderes3.jpg",
     "anderes5" => "anderes4.jpg" // Letzte Datei => Komma-Regel beachten
   );
   
   // Error abfangen.
   if (!isset($filelist[$download]))
     die("Datei $download nicht vorhanden.");
   
   // Vertrauenswürdigen Dateinamen erstellen.
   $filename = sprintf("%s/%s", $basedir, $filelist[$download]);
   
   // Passenden Datentyp erzeugen.
   header("Content-Type: image/jpeg");   
   
   // Passenden Dateinamen im Download-Fenster vorgeben.
   header("Content-Disposition: attachment; filename=\"$filename\"");
   
   // Datei ausgeben.
   readfile($filename);
?>

Die Datei wird unter "http___www.url-zensiert.de_ordner_profilbilder_bild1" gespeichert.
Möchte man einen kurzen und sauberen Bildnamen, kann der Namens des Bildes auf dem Server an das attachment übergeben werden:
Code:

// Passenden Dateinamen im Download-Fenster vorgeben.
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");   


Vielleicht ist das Ganze auch eine Einstellung am Server oder Software (Windows, Linux, usw.)


Zuletzt bearbeitet von SimonDerDude am Fr 16.03.2012 12:02, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen .zip datei für den Download viel zu groß
[flash] befehl für den download einer datei
Datei auf Webseite neben Download als E-Mailversand anbieten
PHP Datei wird nicht ausgeführt, aber zum Download angeboten
PHP-> Zeilenumbruch erzwingen
Zeilenumbruch erzwingen
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.