Dediggefedde: attachment liefert 0-Byte-Download

hallo^^
ich hab mich bereits durch etliche Forenbeiträge hier gewälzt, ohne dass eine Lösung bei mir annäherungsweise funktioniert hätte...

ich würde nämlich gerne eine Datei über ein Script zum Download anbieten.
dabei verwende ich im Script...

$down = $_GET[d];
header("Content-Disposition: attachment; filename=$down");

Die Datei wird auch zum Download angeboten (unabhängig ob Sie existiert... werd' wohl noch ne Überprüfung einbauen müssen) und deren Typ richtig erkannt.
Wenn man die Datei jedoch runterladen möchte, werden exakt 0 Bytes heruntergeladen.

woran kann das denn liegen?

mit freundlichen Grüßen
Dediggefedde

  1. echo $begrüßung;

    $down = $_GET[d];

    $_GET[d] (besser mit Anführeungszeichen: $_GET['d']) ist bereits dein gewünschter Wert. Du muss ihn nicht nochmal umkopieren.

    header("Content-Disposition: attachment; filename=$down");
    Die Datei wird auch zum Download angeboten
    Wenn man die Datei jedoch runterladen möchte, werden exakt 0 Bytes heruntergeladen.

    Welche Datei? Das was du hier zeigst hantiert nur mit ihrem Namen.

    (unabhängig ob Sie existiert... werd' wohl noch ne Überprüfung einbauen müssen) und deren Typ richtig erkannt.

    Ja, auf alle Fälle, denn so kann man alle möglichen Dateien, auf die das ausführende Script Leserechte hat, herunterladen (falls du die Dateien dann auch wirklich auslieferst).

    echo "$verabschiedung $name";

    1. danke für die schnelle Antwort^^

      es handelt sich um eine zip und eine msi-Datei, die ich damit downloaden möchte.

      das umkopieren mach' ich, weil ich die Variable später nochmal brauche und ich der Meinung war, dass es den Seitenaufruf verlangsamt, wenn ich das mehrmals abrufe...

      1. echo $begrüßung;

        es handelt sich um eine zip und eine msi-Datei, die ich damit downloaden möchte.

        Worum es sich handelt ist egal. Solange du eine Datei nicht öffnest und ihren Inhalt in den Response bringst, kommt beim Client nie was an. PHPs readfile()-Funktion macht das beispielsweise.

        das umkopieren mach' ich, weil ich die Variable später nochmal brauche und ich der Meinung war, dass es den Seitenaufruf verlangsamt, wenn ich das mehrmals abrufe...

        $_GET und $_POST sind auch nur Arrays, wenn auch vorbelegte. Ein Zugriff darauf unterscheidet sich in Nichts von anderen Arrays. Der Unterschied zwischen einem Zugriff auf eine Variable und einen Array-Wert ist sicher vorhanden, aber dermaßen minimal, dass er erst bei schätzungsweise 6..7-stelligen Zugriffszahlen spürbar wird. Im Labor wird sowas gern mit Zugriffen in Schleifen gemessen, und dabei gern vergessen, dass dazu noch An- und Abtransport von Daten und die restliche Verarbeitung des Requests gehört. In der Praxis macht man Zugriffe ja mit dem Ziel Daten weiterzuverarbeiten. Die benötigte Zeit für deren Transport ist um Potenzen größer, so dass die Zugriffszeit nicht mehr ins Gewicht fällt. Mit anderen Worten: Du betreibst auf Verdacht hin eine Mikro-Optimierung mit dem praktischen Ergebnis, dass nur dein Quelltext komplexer wird. Selbst wenn sich in einem hochbelasteten System mit solchen kleinen Optimierungen eine Performance-Verbesserung erreichen lässt, dürfte die nicht so groß sein, dass sie signifikant Freiraum für eine weiter ansteigende Nachfrage schafft.

        echo "$verabschiedung $name";

        1. Zitat:
          [Worum es sich handelt ist egal. Solange du eine Datei nicht öffnest und ihren Inhalt in den Response bringst, kommt beim Client nie was an. PHPs readfile()-Funktion macht das beispielsweise.]

          ah^^
          das würde die 0 Bytes erklären^^
          leider habe ich keine Ahnung, wie ich die readfile-Funktion in Bezug auf den DOwnload benutze...

          ich google mal schnell
          ...
          so. jetzt ma schnell ausprobieren
          ...
          ok^^
          benutze ich nur readfile($_GET['d']); wird die Datei geöffnet angezeigt.
          benutze ich danach die header("Content-Disposition: attachment; filename=$_GET['d']"); kommt aber auch keine Datei an.
          in beiden Fällen lädt FF bis zu einer bestimmten Stelle und stürtzt dann ab^^

          ah^^
          erst muss der header gesendet werden und danach die Datei gelesen.
          folgender Code funktioniert also:

          header("Content-Disposition: attachment; filename=$_GET['d']");
          readfile($_GET['d']);

          danke an dedlfix für den Hinweis auf readfile() und den Tipp mit $GET[]

          1. Hi!

            Zitat:
            [..

            Diese Forum hat eine sehr komfortable Zitier-Funktion - bitte belasse zukünftig in Deinen Antworten Die vorgeschlagenen 'Zitat-Zeichen' - dies erleichtert das Lesen ungemein - danke!

            off:PP

            --
            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
          2. Hi,

            folgender Code funktioniert also:

            header("Content-Disposition: attachment; filename=$_GET['d']");
            readfile($_GET['d']);

            ... und verschafft dem Nutzer auch den Zugriff auf jede Datei, die über PHP auslesbar ist - ggfls. auch ansonsten geschützte Dateien. Je nach Server-Konfigurierung können das auch sehr sensible Daten sein...

            freundliche Grüße
            Ingo