tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
530
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    Hallo
    kann ich mit einem Script eine Datei dynamisch erzeugen und dann per header() in einem neuen Fenster automatisch zum download ausgeben?
    Bei einem Link wäre das mit target="_blank" zu machen, aber geht es so auch?
    EDIT: ich möchte die Datei eigentlich nicht auf dem Server zwischenspeichern.
     

  2. #2
    Registriert seit
    Oct 2001
    Ort
    Stuttgart
    Beiträge
    224
    hi!

    hier ein beispiel-codesnipplet, wie man eine datei, die auf einem server liegt, als download dem browser übergibt:

    PHP-Code:

        $file 
    "/Pfad/zur/dat.ei";
        
    $file_name "so_soll_ich_heis.sen";

        
    $fp fopen($file,"rb"); fseek($fp,0,SEEK_END);
        
    $size ftell($fp); rewind($fp);
        
    $stream =  fread($fp,$size); 
        
    fclose($fp);

        
    $disposition "attachment";
        
    $type "application/octet-stream";

        
    Header("Content-Type: "$type ."; name=\""$file_name ."\"\r\n");
        
    Header("Content-Length: "$size ."\r\n");
        
    Header("Content-Disposition: "$disposition ."; filename=\""$file_name ."\"\r\n");

        echo(
    $stream); 
    zu beachten ist, dass $type eigentlich dem wirklichem typ der datei entsprechen sollte. aber so geht's theoretisch und etwas unschön auch.

    matt
     
    Unsere Stellengesuche:
    HTML-CSS-Programmierer
    Perl-Entwickler

    Bist du fit genug? Bewirb dich jetzt!

    Stand: 22.09.2005

  3. #3
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    Wie man die Datei ausgibt ist mir schon klar. Meine Frage, war aber, wie ich auf einer Seite HTML ausgeben kann und in einem neuen Fenster den Download starten lasse. Nach Möglichkeit per Header.
     

  4. #4
    Registriert seit
    Oct 2001
    Ort
    Stuttgart
    Beiträge
    224
    ach so...

    hm, eine lösung dafür wäre, dass du deine html-seite generierst und in dieser einen meta-refresh einbaust, der dich an eine weitere php-seite weiterleitet, die ausschließlich die datei zum download anbietet. per metarefresh geht aber keine neue seite auf. das könntest du aber widerrum mit JavaScript hinbekommen, dann natürlich ohne metarefresh.

    eine HTML-datei ausgeben und einen download im gleichem "zug" starten geht nicht, denn du kannst der ausgabe nur einen typ "zuweisen", damit der browser erkennt, was damit gemacht werden soll.

    mal eine frage an dich: hast du ne ahnung, wie ich den mime-type einer datei rausbekomme, wenn ich php nicht mit der option --with-mime-magic kompiliert habe und mir somit die funktion mime_content_type() nicht zur verfügung steht?

    matt
     
    Unsere Stellengesuche:
    HTML-CSS-Programmierer
    Perl-Entwickler

    Bist du fit genug? Bewirb dich jetzt!

    Stand: 22.09.2005

  5. #5
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    Original geschrieben von matt
    ...mal eine frage an dich: hast du ne ahnung, wie ich den mime-type einer datei rausbekomme, wenn ich php nicht mit der option --with-mime-magic kompiliert habe und mir somit die funktion mime_content_type() nicht zur verfügung steht?...
    Schwierig. Du könntest per exec() mit head den Header der Datei auslesen und versuchen darüber was rauszufinden.
    EDIT: Ich habe es jetzt anders gemacht. Und zwar habe ich das target="_blank" einfach in das Formular geschrieben. Es war so einfach, dass ich nicht draufgekommen bin .
    Geändert von Wolfsbein (09.10.03 um 15:25 Uhr)
     

  6. #6
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    So jetzt bin ich es nochmal.
    PHP-Code:
    header("Content-type: text/csv \r\n");
    header("Content-Length: "sizeof($strCSV) ."\r\n");
    header("Content-Disposition: inline; filename=\"Ver_".$_POST['com'].".csv\" \r\n");

    echo 
    $strCSV
    Der Speicherndialog wird korrekt angezeigt. Aber auf der Platte wird keine Datei erzeugt. Und wenn ich die Datei gleich mit dem Editor öffnen möchte, passiert auch nichts. Fehlt was? Btw: die Variable ist natürlich richtig.
     

  7. #7
    Registriert seit
    Oct 2001
    Ort
    Stuttgart
    Beiträge
    224
    hi!

    kann ich dir leider nicht genau sagen. mir ist lediglich aufgefallen, dass du die datei als inline und nicht als attachment ausgibst. vielleicht ist das der fehler?

    matt
     
    Unsere Stellengesuche:
    HTML-CSS-Programmierer
    Perl-Entwickler

    Bist du fit genug? Bewirb dich jetzt!

    Stand: 22.09.2005

  8. #8
    Registriert seit
    Jul 2001
    Ort
    Bayern
    Beiträge
    969
    Der gleiche Code funktioniert mittlerweile. Keine Ahnung woran es lag. Und inline nehme, da ich so afiak einen Fehler im IE umgehen kann?
     

  9. #9
    Registriert seit
    Oct 2001
    Ort
    Stuttgart
    Beiträge
    224
    die datei als attachment ausgeben ist auch im IE kein problem. hab's eben nochmal getestet. funktioniert sowohl im mozilla als auch im IE einwandfrei.

    gruß,
    matt
     
    Unsere Stellengesuche:
    HTML-CSS-Programmierer
    Perl-Entwickler

    Bist du fit genug? Bewirb dich jetzt!

    Stand: 22.09.2005

Ähnliche Themen

  1. POST per Header senden
    Von einfach nur crack im Forum PHP
    Antworten: 38
    Letzter Beitrag: 03.06.09, 22:29
  2. Header -> Postdaten senden
    Von Napofis im Forum PHP
    Antworten: 0
    Letzter Beitrag: 08.10.07, 04:41
  3. Antworten: 1
    Letzter Beitrag: 20.08.06, 19:04
  4. Header im Hintergrund senden
    Von Pullmann im Forum PHP
    Antworten: 19
    Letzter Beitrag: 06.09.05, 10:03
  5. Header senden bringt Probleme
    Von Blaschki im Forum PHP
    Antworten: 6
    Letzter Beitrag: 26.05.05, 11:01