andreas_ck: Datei-Download mit richtigem Dateinamen

Moin,

ich implementiere einen automatischen Datei-Download in meiner php-Seite. Wenn der Download startet, bietet er mir aber als Dateiname den Namen der php-Datei an, nicht den der herunterzuladenen Datei. Für jeden Hinweis warum das so ist und wie man das ändern kann bin ich dankbar. Hier ein Auszug aus meinem Code:

$datei = @fopen("C:\temp\$projektname.zip", r);
 header("Content-Type: application/zip");
 header("Content-Disposition: attachment, filename=$projektname.zip");
 header("Content-Description: Projektdaten");
 header("Pragma: no-cache");
 header("Expires: 0");
 fpassthru($datei);
 fclose($datei);

Vielen Dank.

Andreas.

  1. Morgen Andreas,

    versuche mal, die Datei mit diesem Befehl aufzurufen (behalte die Content-Type angaben besser!):

    header("Location: C:\temp\$projektname.zip");

    Viele Grüße

    Patrick Canterino

    1. Moin Patrick

      versuche mal, die Datei mit diesem Befehl aufzurufen (behalte die Content-Type angaben besser!):

      header("Location: C:\temp\$projektname.zip");

      A so a schmarrn !
      Da versucht der Browser doch dann die Datei von der lokalen Platte zu holen ... "Location" interessiert im Header nur den Clienten, aber nicht den Server !

      Ciao,

      Harry

      1. Morgen Harry,

        ich habe mal wieder zuviel gedacht! Das würde aber Sinn machen, wenn eine Datei auf dem Server aufgerufen werden soll. Oder?!

        Viele Grüße

        Patrick Canterino

        1. Hi Patrick

          ich habe mal wieder zuviel gedacht! Das würde aber Sinn machen, wenn eine Datei auf dem Server aufgerufen werden soll. Oder?!

          Das macht nur Sinn, wenn die Datei, die im Header referenziert wird, für den Browser auch erreichbar ist. Die Header die Du aus Deinem PHP-Script versendest gehen primär erstmal nur den Clienten was an.
          Du kannst damit aber recht schön Umleitungen auf andere Webseiten basteln.

          Ciao,

          Harry

  2. Holladiwaldfee

    header("Content-Disposition: attachment, filename=$projektname.zip");

    header("Content-Disposition: attachment, filename="".$projektname.".zip"");

    Dann sollte es gehn :-)

    Ciao,

    Harry

    1. Vielen Dank, aber leider war der Effekt der gleiche.
      Ich bin recht ratlos.
      Gruß

      Andreas.

      Holladiwaldfee

      header("Content-Disposition: attachment, filename=$projektname.zip");

      header("Content-Disposition: attachment, filename="".$projektname.".zip"");

      Dann sollte es gehn :-)

      Ciao,

      Harry

      1. Holladiri !

        Vielen Dank, aber leider war der Effekt der gleiche.

        header("Content-Disposition: attachment, filename="".$projektname.".zip"");

        header("Content-Disposition: attachment, filename="".$projektname.".zip"\n\n");

        Dann prorbier's mal so (glaube aber nicht, daß das was hilft).

        Harry

        1. Hoi,

          header("Content-Disposition: attachment, filename="".$projektname.".zip"\n\n");

          Sorry, aber das ist ausgemachter Bloedsinn. Das setzen der Newlines
          solltest du schon der Header-Funktion ueberlassen. Finde dich halt
          damit ab, dass nicht alle Browser das so moegen.

          Gruesse,
           CK

          1. Oih !

            header("Content-Disposition: attachment, filename="".$projektname.".zip"\n\n");

            Sorry, aber das ist ausgemachter Bloedsinn. Das setzen der Newlines
            solltest du schon der Header-Funktion ueberlassen. Finde dich halt
            damit ab, dass nicht alle Browser das so moegen.

            Ok stimmt. Mein Fehler. Ich dachte, ich hätte mal irgendwo gelesen, daß man der header-Funktion auf jeden Fall ein Newline hinterherschieben sollte. Tut mir sorry.

            Vielleicht hilft ja aber der Kommentar auf http://www.php.net/manual/en/function.header.php weiter:

            <cite>
            header("Content-type: application/pdf");
            header("Content-Disposition: attachment; filename=downloaded.pdf");

            Note: There is a bug in Microsoft Internet Explorer 4.01 that prevents this from working. There is no workaround. There is also a bug in Microsoft Internet Explorer 5.5 that interferes with this, which can be resolved by upgrading to Service Pack 2 or later.
            </cite>

            Ciao,

            Harry

            1. Hey,

              vielen Dank für den Link. Der hat mich auf eine Idee gebracht, die nun funzt. Ich erstelle die *.zip-Datei einfach innerhalb des Webbereichs. Da sie anschließend sofort wieder gelöscht wird, ist das auch nicht weiter schlimm. Nun kann ich nämlich über

              header("Location: http://.../$projektname.zip");

              die URL angeben und der Download startet von alleine.
              Viele Grüße

              Andreas

              Oih !

              header("Content-Disposition: attachment, filename="".$projektname.".zip"\n\n");

              Sorry, aber das ist ausgemachter Bloedsinn. Das setzen der Newlines
              solltest du schon der Header-Funktion ueberlassen. Finde dich halt
              damit ab, dass nicht alle Browser das so moegen.

              Ok stimmt. Mein Fehler. Ich dachte, ich hätte mal irgendwo gelesen, daß man der header-Funktion auf jeden Fall ein Newline hinterherschieben sollte. Tut mir sorry.

              Vielleicht hilft ja aber der Kommentar auf http://www.php.net/manual/en/function.header.php weiter:

              <cite>
              header("Content-type: application/pdf");
              header("Content-Disposition: attachment; filename=downloaded.pdf");

              Note: There is a bug in Microsoft Internet Explorer 4.01 that prevents this from working. There is no workaround. There is also a bug in Microsoft Internet Explorer 5.5 that interferes with this, which can be resolved by upgrading to Service Pack 2 or later.
              </cite>

              Ciao,

              Harry

              1. Hi Andreas,

                Ich erstelle die *.zip-Datei einfach innerhalb des Webbereichs.
                Da sie anschließend sofort wieder gelöscht wird, ist das auch
                nicht weiter schlimm.

                habe ich das jetzt richtig verstanden, daß Du einen Download aus
                einer dynamisch erstellten Datei speisen möchtest?

                Na, dann mal viel Spaß beim Synchronisieren ...

                Viele Grüße
                      Michael

  3. Hoi,

    ich implementiere einen automatischen Datei-Download in meiner
    php-Seite. Wenn der Download startet, bietet er mir aber als
    Dateiname den Namen der php-Datei an, nicht den der
    herunterzuladenen Datei. Für jeden Hinweis warum das so ist und wie
    man das ändern kann bin ich dankbar. Hier ein Auszug aus meinem
    Code:

    [... code ...]

    Der ist soweit ok. Fuer die Browser, dies bis dahin noch nicht
    geschnallt haben, leg den Link auf 'download.php/dateiname'. Wenn du
    einen richtigen Webbrowser benutzt, sollte der das verstehen, dein
    Script aufrufen und '/dateiname' in die Environment-Variable PATH_INFO
    schreiben.

    Gruesse,
     CK

    1. Moin,

      vielen Dank, aber dein Vorschlag scheint nicht zu funktionieren; wenn ich dich richtig verstanden habe: Die Datei, die den Download startet soll mit der Syntax datei.php/zu_downloadende_datei.zip aufgerufen werden? Das gibt bei mir einen CGI Error aufgrund fehlender Header; sprich weil er die Datei zu_downloadende_datei.zip aufrufen will und nicht findet. Wobei ich ja auch nicht sicher bin, ob du den IE 6 einen richtigen Webbrowser nennst.
      Viele Gruesse

      Andreas.

      Hoi,

      ich implementiere einen automatischen Datei-Download in meiner
      php-Seite. Wenn der Download startet, bietet er mir aber als
      Dateiname den Namen der php-Datei an, nicht den der
      herunterzuladenen Datei. Für jeden Hinweis warum das so ist und wie
      man das ändern kann bin ich dankbar. Hier ein Auszug aus meinem
      Code:

      [... code ...]

      Der ist soweit ok. Fuer die Browser, dies bis dahin noch nicht
      geschnallt haben, leg den Link auf 'download.php/dateiname'. Wenn du
      einen richtigen Webbrowser benutzt, sollte der das verstehen, dein
      Script aufrufen und '/dateiname' in die Environment-Variable PATH_INFO
      schreiben.

      Gruesse,
      CK

      1. Hoi,

        Lesetipp: http://learn.to/quote

        vielen Dank, aber dein Vorschlag scheint nicht zu funktionieren;
        wenn ich dich richtig verstanden habe: Die Datei, die den
        Download startet soll mit der Syntax
        datei.php/zu_downloadende_datei.zip aufgerufen werden?

        Richtig.

        Das gibt bei mir einen CGI Error aufgrund fehlender Header;
        sprich weil er die Datei zu_downloadende_datei.zip aufrufen will
        und nicht findet.

        Das ist nicht wahr. Ein 500er Fehler hat nichts mit einem 400er
        Fehler zu tun. Es ist wohl eher so, dass was mit deiner Webserver-
        Config nicht stimmt.

        Wobei ich ja auch nicht sicher bin, ob du den IE 6 einen
        richtigen Webbrowser nennst.

        Sorry, das war ein Typo. Es muss 'Webserver' heissen.

        Gruesse,
         CK