kostenloser Webspace werbefrei: lima-city


Link zu xml-Datei als Download-Link?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tengames

    tengames hat kostenlosen Webspace.

    Hallo

    ich habe ein Script das für den User eine XML Datei erstellt
    diese Datei soll sich der User dann auf seinen PC downloaden

    bisher mache ich einfach einen Link zur XML-Datei
    mit dem Hinweis: bitte Speichern unter (nicht nur öffnen)

    Wie kann ich einen Link so setzen, dass die Datei nicht im Browser geöffnet wird,
    sondern gleich der Download-Dialog gestartet wird (geht das überhaupt?)

    Ich will aber die Datei nicht ZIPpen, es soll beim User-Client als .xml ankommen

    Wie muss ich den <a href="datei.xml" target="_download">Download mich</a> gestalten,
    damit das geht? ... gibt es dafür einen target oder brauch ich JS oder was auch immer ?!?
    Danke
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Geht nicht. Zumindest gibt es keine für alle Browser kompatible Lösung. Du musst die XML über PHP ausliefern und entsprechende Header senden.

    <?php
    header('Content-type: text/xml');
    header('Content-Disposition: attachment; filename="datei.xml"');
    
    $datei = @file_get_contents('datei.xml');
    
    die($file)
    ?>


    Beitrag zuletzt geändert: 20.4.2011 7:07:08 von fabo
  4. Autor dieses Themas

    tengames

    tengames hat kostenlosen Webspace.

    Danke
    hab nochmal gegoogelt ...

    header("Pragma: public"); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    Header('Content-Disposition: attachment; filename="datei.xml"');



    ... macht es nicht Sinn im header als Content-Type: download anzugeben anstatt text/xml ?
    nur so aus Interesse ... es funktioniert auch so mit dem BSP von fabo

  5. Moin,

    den Content-Type kannst du angeben, wie du willst, das ist nur eine Hilfe für den Browser, damit dieser weiß, was für eine Datei kommt, so dass er sich dann z.B. eine Verknüpfung zu einer Anwendung "denken" kann, falls der User einfach nur die Datei außerhalb des Browser öffnen will, zum Beispiel in einem Editor.
    Übrigens beim setzen der header kann man auch noch einige Sachen beachten, so verhält sich der IE zum Beispiel anders, wenn bestimmte Einträge fehlen, darum habe ich mir dazu so eine Art Standard snippet zusammengebaut, das so aussieht
    // IE Sonderbehandlung, damit dieser auch richtig downloaded
    header('Pragma: public'); 
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    
    // IE Sonderbehandlung für andere Browser zurücksetzen
    header('Cache-Control: private', false);
    
    // Download anschubsen, dazu …
    // … den Dateityp senden, damit der Browser weiß, was er damit
    // machen kann und soll
    header('Content-Type: '.$file['type']);
    
    // … Einen Dateinamen angeben, den der Browser beim Speichern
    // dann dem User vorschlägt
    header('Content-Disposition: attachment; filename="'.$file['name'].'";');
    
    // … verhindern, dass base64 Kodiert übertragen wird,
    // das wäre 33% größer
    header('Content-Transfer-Encoding: binary');
    
    // … Dateilänge angeben, damit der Browser weiß wie groß die Datei ist
    // außerdem muss dieser Header bei manchen Browser gesetzt sein 
    // damit ein Download angeboten wird
    header('Content-Length: '.filesize($file['location']));
    
    // … lese die Datei direkt in die Ausgabe, das reduziert die
    // Arbeitsspeicherauslastung und erhöht so die Performance
    readfile($file['location']);
    
    // … Beende das Programm
    exit;
    P.S.: Wundere dich nicht über das array $file, das ist bei mir oft so organisiert, da es dann leichter ist Eigenschaften zu ändern, Beispiel:
    $file = array();
    $file['name'] = 'Datei.txt';
    $file['location'] = '../siblingFolder/subFolder/File.html';
    $file['type'] = 'text/xml';

    Mit freundlichen Grüßen

    Beitrag zuletzt geändert: 27.4.2011 21:21:41 von nemoinho
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!