Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateidownload nicht mehr möglich!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateidownload nicht mehr möglich!

    Hallo @,

    ich habe immer den Dateidownload mit Hilfe eines PHP-Script realisiert. Es funktionierte alles einwandfrei, bis ich den Provider gewechselt habe. Jetzt bekomme ich ständig folgende Fehlaermeldung:

    Warning: Cannot modify header information - headers already sent by (output started at /home/www/htdocs/user507/html/de/php/download.php: in /home/www/htdocs/user507/html/de/php/download.php on line 31

    Warning: Cannot modify header information - headers already sent by (output started at /home/www/htdocs/user507/html/de/php/download.php: in /home/www/htdocs/user507/html/de/php/download.php on line 36

    Warning: readfile() [function.readfile]: open_basedir restriction in effect. File(/home/www/user507/html/de/download/lebenslauf-rogula.pdf) is not within the allowed path(s): (/home/www/htdocs/user507/) in /home/www/htdocs/user507/html/de/php/download.php on line 38

    Warning: readfile(/home/www/user507/html/de/download/lebenslauf-rogula.pdf) [function.readfile]: failed to create stream: Operation not permitted in /home/www/htdocs/user507/html/de/php/download.php on line 38

    Was mache ich denn falsch???
    HILFE......

    MfG

  • #2
    1. Hau die header() Anweisung nach ganz oben im Script.
    2. open_basedir ist AFAIK 'ne Einstellung des Servers, was das genau ist weiß ich nicht.
    3. [readfile] ich wüsste nicht, dass man pdf Dateien mit readfile() auslesen kann!

    Kommentar


    • #3
      download.php - Inhalt

      <html>
      <head>
      <title>Download</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      </head>

      <body>
      <?php

      // $download sei der Bezeichner für die zu ladende Datei
      $download = $_GET['download'];

      // Dieses Verzeichnis liegt außerhalb des Document Root und
      // ist nicht per URL erreichbar.
      $basedir = "/home/www/user507/html/de/download";

      // Übersetzung von Download-Bezeichner in Dateinamen.
      $filelist = array(
      "plik1" => "lebenslauf-rogula.pdf"
      );

      // Einbruchsversuch abfangen.
      if (!isset($filelist[$download]))
      die("Datei $download nicht vorhanden.");

      // Vertrauenswürdigen Dateinamen basteln.
      $filename = sprintf("%s/%s", $basedir, $filelist[$download]);

      // Passenden Datentyp erzeugen.
      header("Content-Type: application/pdf");

      // Passenden Dateinamen im Download-Requester vorgeben,
      // z. B. den Original-Dateinamen
      $save_as_name = basename($filelist[$download]);
      header("Content-Disposition: attachment; filename=\"$save_as_name\"");
      // Datei ausgeben.
      readfile($filename);

      ?>
      </body>
      </html>

      Vielleicht jetzt könnt Ihr mir helfen?

      Kommentar


      • #4
        UND WAS NUN ???

        Hallo @,

        ich habe ein bisschen recherchiert, und es gibt folgendes:
        1. danke ich Euch für die schnelle Hilfe!
        2. man sollte tatsächlich kein Output vor header() setzen
        3. durch das "open_basedir" kann Zugriff auf Dateien auf alle
        Verzeichnisse unterhalb des hier angegebenen Verzeichnisses beschränkt werden.
        Eigentlich eine sehr empfehelnswerte Konfiguration.
        4. mit readfile() kann man keine *.pdf Dateien zum Download ("Datei speichern unter...")anbieten!
        5. alle HTML Tags habe ich rausgeschmissen - die sind überflüssig


        ...also was jetzt?
        Wie kann ich einen Dateidownload reslisieren, und zwar unabhängig von Dateityp?

        Unter http://www.dclp-faq.de/q/q-datei-download.html habe ich folgendes gefungen:
        *******************************************
        // $download sei der Bezeichner für die zu ladende Datei
        // etwa:
        $download = $_GET['download'];

        // Dieses Verzeichnis liegt außerhalb des Document Root und
        // ist nicht per URL erreichbar.
        $basedir = "/home/www/download";

        // Übersetzung von Download-Bezeichner in Dateinamen.
        $filelist = array(
        "file1" => "area1/datei1.zip",
        "file2" => "area1/datei2.zip",
        "file3" => "area2/datei1.zip"
        );

        // Einbruchsversuch abfangen.
        if (!isset($filelist[$download]))
        die("Datei $download nicht vorhanden.");

        // Vertrauenswürdigen Dateinamen basteln.
        $filename = sprintf("%s/%s", $basedir, $filelist[$download]);

        // Passenden Datentyp erzeugen.
        header("Content-Type: application/octet-stream");

        // Passenden Dateinamen im Download-Requester vorgeben,
        // z. B. den Original-Dateinamen
        $save_as_name = basename($filelist[$download]);
        header("Content-Disposition: attachment; filename=\"$save_as_name\"");

        // Datei ausgeben.
        readfile($filename);
        ************************************************** ******

        Davon habe ich mein Script entworfen.
        Gibt es was besseres, universelles???

        Kommentar

        Lädt...
        X