Tomm: Download nur mit Session

Moin,

mit einem Text geht das ja ganz einfach, ihn nur ausgeben, wenn eine Session gültig ist:

if (Session...) { Text... }

Wie kann man nun eine beliebige Datei nur dann zum Download anbieten, wenn eine Session gültig ist (oder man mit einer passenden Get-Variable ankommt)? Da kann ich ja keinen Code reinschreiben?

Danke, Tom

  1. Hi,

    Wie kann man nun eine beliebige Datei nur dann zum Download anbieten, wenn eine Session gültig ist (oder man mit einer passenden Get-Variable ankommt)? Da kann ich ja keinen Code reinschreiben?

    die Datei muss über ein serverseitiges Script ausgelesen und zur Ressource gemacht werden.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Moin Cheatah,

      die Datei muss über ein serverseitiges Script ausgelesen und zur Ressource gemacht werden.

      Also sie liegt in einem nicht zugänglichen Verzeichnis, wird dann vom Script eingelesen und ausgegeben?
      Wenn es sich um ein ZIP-Archiv handelt, muss das Script auch *.zip heissen, oder? Und der Server muss es trotzdem als z.B. PHP-Script parsen. Oder hab ich das falsch verstanden?

      Danke, Tom

      1. Hi,

        Also sie liegt in einem nicht zugänglichen Verzeichnis, wird dann vom Script eingelesen und ausgegeben?

        genau.

        Wenn es sich um ein ZIP-Archiv handelt, muss das Script auch *.zip heissen, oder?

        Sowohl URL als auch Dateiname sind irrelevant. Allenfalls den IE könntest Du verwirren; alle anderen Clients richten sich nach dem HTTP-Standard, also nach dem gesendeten Content-Type.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Hello,

    Wie kann man nun eine beliebige Datei nur dann zum Download anbieten, wenn eine Session gültig ist (oder man mit einer passenden Get-Variable ankommt)? Da kann ich ja keinen Code reinschreiben?

    #-----------------------------------------------------------------
    function sendscript($path, $filename)
    {
      $filename = basename($filename);
      $filepath = $path."/".$filename;
      $len = filesize($filepath);

    $fh = @fopen($filepath,"r");
      if (!$fh) return false;

    $data = fread($fh, $len);
      fclose($fh);

    header("Content-Type: text/plain");
      header("Content-Disposition: attachment; filename="$filename"");
      header("Accept-Ranges: bytes");
      header("Content-Length: $len");

    echo $data;

    return true;
    }
    #-----------------------------------------------------------------

    Bisher hatte das so (oder so ähnlich) immer funktioniert. Vorhin
    hat die Funktion allerdings gemuckt. Kann aber auch sein, dass
    die DoS-Attacke auf das Script http://bitworks.de/~selfHTML/speichern.php daran Schuld war.
    Da fehlten nämlich noch die @ vor den Filefunktionen...

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Moin Tom,

      Tom

      Ah, wegen Dir muss ich mich Tomm nennen?! ;-)

      Danke für den Code, ich werde das mal ausprobieren.

      Grüße, Tom

      1. Hello,

        Ah, wegen Dir muss ich mich Tomm nennen?! ;-)

        Nö, Du kannst Dich auch tommy nennen oder Hansdampf ;-))

        Danke für den Code, ich werde das mal ausprobieren.

        Da habe ich gerade nochmal dran gebastelt, weil die alte Funktion auf meinem Testserver immer diesen merkwürdigen Fehler ausgelöst hat, dass der Browsser den HTTP-Header angezeigt hat.

        #--------------------------------------------------------------------
        function sendscript($path, $filename)
        {
          ## ggf. anpassen, wenn Files aus anderen Directories
          ## als dem aktuellen gelesen werden sollen
          $filename = basename($filename);
          $filepath = $path."/".$filename;
          $len = filesize($filepath);

        $fh = @fopen($filepath,"r");
          if (!$fh) return false;

        $data = fread($fh, $len);
          fclose($fh);

        $header = "";
          $header .= "Content-Type: text/plain\r\n";
          $header .= "Content-Disposition: attachment; filename="$filename"\r\n";
          $header .= "Accept-Ranges: bytes\r\n";
          $header .= "Content-Length: $len\r\n";

        header($header);
          echo $data;

        return true;
        }
        #--------------------------------------------------------------------

        So funktioniert es auf allen zur Verfügung stehenden Servern und PHP-Versionen ohne den Fehler. Verstanden habe ich das aber nicht. Dazu müsste ich in den HTTP-Stream reinschauen können.

        In dem Speicher-Script habe ich das auch entsprechend geändert und es funktioniert, was ja nicht unbedingt was zu sagen hat :-(

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen