Datei-Download

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

  • Datei-Download

    Hallo zusammen.

    Ich möchte auf einer Webseite Dateien zum Download anbieten. Da ich die Klicks zählen, aber keinen Umweg über eine andere Seite gehen möchte mache ich das mit header Befehlen, parallel werden die Infos in eine Datenbank geschrieben.

    Das sieht so aus:

    PHP-Code:
    header("Cache-Control: ");
    header("Pragma: ");
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"".basename($url)."\";");
    header("Content-length:".(string)(filesize($url))); 
    Funktioniert soweit auch im IE und FireFox. Aber der Safari Lädt die index.php runter. Dasselbe passiert in allen Browsern wenn man versucht die Dateien per Rechtsklick runterzuladen.

    Für andere Lösungen wäre ich sehr dankbar.

    Gruß xlr

  • #2
    unter umständen ein
    PHP-Code:
    header("Content-type: application/force-download"); 
    klappt das mit rechtsklick im ff tatsächlich? ich sehe dann meistens auch ein bla.php zum downloaden

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      hi, force download habe ich auch schon versucht, dasselbe ergebnis...
      in firefox und ie funktioniert es nur mit linksklick...

      Kommentar


      • #4
        Aber der Safari Lädt die index.php runter
        ach ja, vergessen, die typischen mac-scheisse. das machte schon der ie auf diesen kisten. allerdings meine ich mich zu erinnern, dass zwar als datei "index.php" angezeigt wurde, aber letztendlich immer die richtige datei dann heruntergeladen wurde.
        in firefox und ie funktioniert es nur mit linksklick
        da kannst du wohl nichts dagegen machen, außer einen hinweis zu setzen.

        gruß
        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Original geschrieben von Kropff
          allerdings meine ich mich zu erinnern, dass zwar als datei "index.php" angezeigt wurde, aber letztendlich immer die richtige datei dann heruntergeladen wurde.
          Na was soll er denn auch sonst runterladen - den PHP-Code etwa...?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            nö er lädt das geparste php runter sprich das html da steht sogar noch schön "database connection error" drin

            ich bin doch net der einzige der downloads tracken will, was gibt es denn noch für möglichkeiten?

            Kommentar


            • #7
              Original geschrieben von xlerator
              nö er lädt das geparste php runter sprich das html da steht sogar noch schön "database connection error" drin
              zeugt mehr von fehlerhaft ausgeführtem PHP-Code, Debug-Ausgaben machen

              abgesehen davon
              Pragma:
              Cache-Control:
              ohne Wert sind ziemlich sinnlos, oder?
              die anderen beiden Header mal als String ausgeben lassen, steht da das erwartete drin?

              wobei mir schon das mit dem html/database connection error, komisch aufstößt...


              ansonsten wäre ein Link zur Seite mal schön

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Original geschrieben von xlerator
                nö er lädt das geparste php runter sprich das html da steht sogar noch schön "database connection error" drin
                Wieso steht in einer Seite, die Dateien zum Download durchschleusen soll, HTML-Code drin?

                Und wenn ein Datenbankfehler auftritt - warum kümmerst du dich dann nicht um den, suchst die Ursache und beseitigst ihn?
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Also das "script" das die Dateien bereitstellen soll steht im Kopf meiner index.php, darunter kommt der Rest der Seite. Ich setze eine Variable $download=fileid wenn ein Link geklickt wird. Dadurch wird das Skript aktiviert.

                  In der index.php steht aber logischerweise auch der Rest der Seite, ich möchte eben keinen weiteren Seitenaufruf machen.

                  Es tritt kein Datenbankfehler auf, in der index.php die der Browser runterlädt steht das nur als HTML Code drin.

                  Diese Pragma:, Cache-Control:, Angaben habe ich aus einem Script kopiert, da steht explizit:

                  PHP-Code:
                  header("Cache-Control: ");# leave blank to avoid IE errors
                  header("Pragma: ");# leave blank to avoid IE errors
                  header("Content-type: application/octet-stream");
                  header("Content-Disposition: attachment; filename=\"".basename($url)."\";");
                  header("Content-length:".(string)(filesize($url))); 
                  Link kann ich leider keinen geben da das auf unserem Testsystem liegt. Aber mehr als der Code oben ist sowieso nicht relevant für das Script. Aber hier mal das ganze Geraffel:

                  PHP-Code:

                   
                  if(isset($download))
                   {

                  require_once(
                  "DB.php");
                  require_once(
                  "config.php");
                  $dbname "*********";
                  $dsn DB::connect("$dbtype://$dbuser:$dbpass@$dbhost/$dbname");


                    
                  $download "SELECT * FROM Files WHERE id = $download";
                    
                  $download $dsn->query($download);
                    
                  $download->fetchInto($download,DB_FETCHMODE_ASSOC);
                    
                  $dsn->disconnect();

                                   if(
                  $download[id] != "")
                                   {

                                   require_once(
                  "config_write.php");
                                   
                  $dbname "***********";
                                   
                  $dsn DB::connect("$dbtype://$dbuser:$dbpass@$dbhost/$dbname");

                                   
                  $login $_SESSION['loginname'];
                                   
                  $ip getenv ("REMOTE_ADDR");

                                   
                  $confirm "INSERT INTO Downloads
                                   (id_file,login,ip)
                                   VALUES
                                   ('
                  $download[id]','$login','$ip');";


                                   
                  $dsn->query($confirm);
                                   
                  $dsn->disconnect();

                                    
                  $url="$download[pfad]";


                  header("Cache-Control: ");# leave blank to avoid IE errors
                  header("Pragma: ");# leave blank to avoid IE errors
                  header("Content-type: application/octet-stream");
                  header("Content-Disposition: attachment; filename=\"".basename($url)."\";");
                  header("Content-length:".(string)(filesize($url)));

                                    }

                    unset (
                  $dbtype);
                    unset (
                  $dbuser);
                    unset (
                  $dbpass);
                    unset (
                  $dbhost);
                   } 
                  Also wie gesagt: Dat funzt soweit alles, auch die Datenbankeinträge, nur dieser Download über den Header funktioniert nicht mit allen Browsern und wenn man einen Rechtsklick -> Speichern macht, dann lädt er zwar zum Beispiel eine Datei mit dem Namen "datei.xls" runter aber wenn man die aufmacht sieht man eine zerschossene Webseite, sprich er benennt die index.php in datei.xls um und lädt sie runter.

                  Kommentar


                  • #10
                    Original geschrieben von xlerator
                    In der index.php steht aber logischerweise auch der Rest der Seite, ich möchte eben keinen weiteren Seitenaufruf machen.
                    Dann solltest du darauf verzichten, nach einem Download dem Client auch noch dein restliches HTML zu schicken - in dem du das Script danach abbrichst. Oder hast du das gemacht?
                    Es tritt kein Datenbankfehler auf, in der index.php die der Browser runterlädt steht das nur als HTML Code drin.
                    Aha, dann handelt es sich wohl lediglich um einen PHP-Scherz? Funny.

                    (Vielleicht tritt ja aber doch einer auf, und du bist nur zu ... um das zu checken - und von dieser Fehlerausgabe rührt auch der HTML-Code her ...?)
                    Zuletzt geändert von wahsaga; 25.01.2007, 09:18.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      1. $confirm = "INSERT INTO Downloads (id_file,login,ip) VALUES ([color=red]'$download[id]'[/color],'$login','$ip');";
                      2. $url=[color=red]"$download[pfad]"[/color];

                      wegen 1. und 2. möchtest du bitte Grundlage in PHP nachholen.

                      zum Problem: du hast zwar header-Daten gesendet, aber wo bleibt die Datei? Ich sehe nichts davon Außerdem wie sieht der Inhalt von dieser runtergeladenen HTML-Datei aus

                      Kommentar


                      • #12
                        Original geschrieben von asp2php
                        1. $confirm = "INSERT INTO Downloads (id_file,login,ip) VALUES ([color=red]'$download[id]'[/color],'$login','$ip');";
                        2. $url=[color=red]"$download[pfad]"[/color];

                        wegen 1. und 2. möchtest du bitte Grundlage in PHP nachholen.
                        Keine ahnung worauf du hinauswillst

                        Original geschrieben von asp2php
                        zum Problem: du hast zwar header-Daten gesendet, aber wo bleibt die Datei? Ich sehe nichts davon Außerdem wie sieht der Inhalt von dieser runtergeladenen HTML-Datei aus
                        die datei wird mit der $url übergeben.
                        der inhat der html datei ist die geparste index.php.
                        Zuletzt geändert von xlerator; 25.01.2007, 11:34.

                        Kommentar


                        • #13
                          Was hälst vom Einsatz von readfile () ?
                          Schau mal hier.
                          Mit dieser Funktion streamst du eine Datei...

                          Kommentar


                          • #14
                            danke, ich habs mittlerweile gelöst, war ein problem mit dem relativen pfad...

                            Kommentar

                            Lädt...
                            X