Download bei Aufruf

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

  • Download bei Aufruf

    Hallo,
    ich würde gerne selber einen Download-Counter basteln!

    Ich habe mir das ganze so gedacht:

    Der Download-Link geht direkt auf eine PHP-Datei, diese heißt z. B. treiber.php

    Diese Datei öffnet eine Textdatei, und erhöht den Stand dort immer um 1, bei einem Aufruf.

    Gleichzeitig muss die PHP-Datei aber automatisch den Download der .zip Datei starten.

    Wie ist dieser automatische Download in einer PHP-Datei möglich?

    Fireball22

  • #2
    Ein Ansatz wäre dieser hier:
    treiber.php
    PHP-Code:
    <?php
    // Counter erhöhen
    file_put_contents($logfilefile_get_contents($logfile)+1);
    // Download starten
    readfile($_GET['file']);
    ?>
    $logfile sollte natürlich den Pfad zur Datei enthalten, in der die Zahl der Downloads festgehalten wird, die gewünschte Datei (der Download) sollte per URL (?file=foobar.txt) übergeben werden und evtl. wäre das Senden von typischen Headern vor readfile() angebracht (Beispiele dazu unter http://php.net/header).

    Kommentar


    • #3
      Vielen Dank für deine Hilfe!
      Das hier ist ja die Musterlösung, ich hätte das ganz anderst, komplizierter gemacht.

      Ich hätte erst mit fopen("anzahl.txt",r+) gearbeitet...

      Fireball22

      Kommentar


      • #4
        Lokal auf meinem Rechner unter WAMP läuft alles soweit perfekt, aber leider funktioniert folgendes nicht auf dem Webserver, nachdem ich es hochgeladen habe:

        PHP-Code:

        /* if($_GET['file'] == "fakemailerv1.zip")
            {
            $logfile = "downloads_fakemailerv1.txt";
            }
        */

        $logfile "downloads_fakemailerv1.txt";
        // Counter erhöhen
        file_put_contents($logfilefile_get_contents($logfile)+1);
        // Download starten
        readfile($_GET['file']); 
        URL: http://www.michis-homepage.net/extra...kemailerv1.zip

        Der kennt anscheinend nicht mal die Funktion, an was könnte das liegen?
        Hat das was mit Register-Globals zu tun?




        Fatal error: Call to undefined function: file_put_contents() in /var/www/vhosts/michis-homepage.net/httpdocs/extras/scripting/download.php on line 11
        Fireball22

        Kommentar


        • #5
          Ein Blick ins Manual hätte dir verraten, dass es diese Funktion erst seit PHP5 gibt.
          Bau dir die Funktionen file_*_contents() einfach mit fopen, fread/fwrite und fclose nach. Umgib sie mit
          if (!function_exist(...)) {}, damit es bei einem PHP-Update keine Konflikte gibt.

          Kommentar


          • #6
            Habe glaub den Fehler gefunden!

            Es liegt warscheinlich daran, dass diese Funktion nur von PHP 5 unterstüztzt wird, ich habe aber auf meinem Server 4.3.10 installiert.

            Fireball22

            Kommentar


            • #7
              Hehe, da war wieder "jemand" schneller

              Fireball22

              Kommentar


              • #8
                So, jetzt läuft soweit alles, so siehts aus:

                PHP-Code:
                <?php

                if(!isset($_GET['file']))
                    {
                    
                header('Location: [/URL]http://www.michis-homepage.net/scripting.php[/url]');
                    exit();
                    }

                if(
                $_GET['file'] == "fakemailerv1.zip")
                    {
                    
                $logfile "downloads_fakemailerv1.txt";
                    }

                // $logfile = "downloads.txt";
                // Counter erhöhen
                // file_put_contents($logfile, file_get_contents($logfile)+1);
                // Download starten


                if (function_exist)
                {
                $datei fopen($logfile,"r+");
                $stand fgets($datei,10000);
                if(
                $stand == "0")
                    {
                    
                $stand 0;
                    }

                $stand++;
                rewind($datei);
                fwrite($datei,$stand);
                fclose($datei);
                }
                else
                {
                // Counter erhöhen
                file_put_contents($logfilefile_get_contents($logfile)+1);
                }

                readfile($_GET['file']);

                ?>
                Läuft alles, nur die Ausgabe gefällt mir nicht so ganz
                http://www.michis-homepage.net/extra...kemailerv1.zip

                Fireball22

                Kommentar


                • #9
                  Habe jetzt noch folgendes hinzugefügt und es geht nun:

                  PHP-Code:
                  header("Content-Type: application/zip");
                  header "Content-Length: " filesize($_GET['file']) );
                  header("Content-Disposition: attachment; filename= \"fakemailerv1.zip\"");
                  readfile($_GET['file']); 
                  Aber ist das eigentlich alles richtig, und ist oben auch alles richitg?

                  Fireball22

                  Kommentar


                  • #10
                    Original geschrieben von Fireball22
                    Aber ist das eigentlich alles richtig, und ist oben auch alles richitg?
                    Kauf dir doch bitte mal ein gescheites PHP-Buch oder lese dich mal durch die unzähligen PHP Tutorials im Netz durch anstatt hier bei jeder kleinen änderung zu fragen ob das so richtig ist oder nicht.

                    Wenn etwas nicht funktioniert ist die warscheinlichkeit groß das etwas nicht stimmt, dann liest man sich kurz durch's manual, probiert etwas herum und sicher funktioniert es dann auch richtig.

                    Hilfestellung !== Ständig wegen jeder Scheisse den Hintern abgewischt zu bekommen (...sorry..)



                    Sers
                    Der Boris

                    Kommentar


                    • #11
                      Nein, aber es ist genauso, wenn du einen Schüler einen Aufstatz schreiben lässt.
                      Dieser wird seine Rechtschreibfehler auch nicht selber erkennen.

                      Bei mir läuft im Moment alles problemlos, aber ich möchte halt trotzdem gerne mal von anderen die Meinung hören, ob man noch was verbessern könnte, ob alle Funktionen gehen und ich evtl. diese nicht nur überschrieben habe, und und und...

                      Aber wenn alles richitg ist, dann passt das und ich kann mich freuen

                      Fireball22

                      Kommentar


                      • #12
                        Original geschrieben von Fireball22
                        Nein, aber es ist genauso, wenn du einen Schüler einen Aufstatz schreiben lässt.
                        Dieser wird seine Rechtschreibfehler auch nicht selber erkennen.
                        Wenn er aber in einen Duden schaut sicherlich schon, selbiges kannst du bei PHP im manual machen!

                        Viele Fragen würden sich einfach erübrigen wenn man etwas recherchiert und die manuals durchblättert, mehr wollte ich damit auch garnicht sagen



                        Sers
                        Der Boris

                        Kommentar


                        • #13
                          Die PHP-Manual kann aber sicherlich nicht sagen ob das alles so Sinn macht und alles soweit passt und keine Sicherheitsrisiken im Script entstehen!

                          Fireball22

                          Kommentar


                          • #14
                            Original geschrieben von Fireball22
                            Die PHP-Manual kann aber sicherlich nicht sagen ob das alles so Sinn macht und alles soweit passt und keine Sicherheitsrisiken im Script entstehen!
                            Wenn dein Beispiel dem beispiel aus dem manual gleicht kannst du sicher sein das es so sinn macht
                            Was die Sicherheistrisiken angeht hast du dies nicht gefragt, ergo wäre dies eine spezifizierte frage und berechtigt, anders als die anderen

                            So genug Off-Topic für heute.


                            Sers
                            Der Boris

                            Kommentar


                            • #15
                              PHP-Code:
                              <?php

                              // was'n das bitte?
                              if (function_exist) {
                                  
                              $datei fopen($logfile,"r+");
                                  
                              $stand fgets($datei,10000);
                                  
                              // Und das?
                                  
                              if ($stand == "0") {
                                      
                              $stand 0;
                                  }
                                  
                              $stand++;
                                  
                              rewind($datei);
                                  
                              fwrite($datei,$stand);
                                  
                              fclose($datei);
                              } else {
                                  
                              // Wie jetzt, ich denk die Funktionen gibts bei dir nicht?
                                  
                              file_put_contents($logfilefile_get_contents($logfile)+1);
                              }

                              // Wenn die Datei im selben Verzeichnis liegt und 
                              // genauso heißt, wie es der User in der URL sieht,
                              // ist es für ihn ein leichtes, deinen Counter zu umgehen.
                              readfile($_GET['file']);

                              ?>
                              Insgesamt also ziemlicher Murks! Dreh mal dein error-reporting auf scharf!

                              Kommentar

                              Lädt...
                              X