Ankündigung

Einklappen
Keine Ankündigung bisher.

Download begrenzen

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

  • Download begrenzen

    Mit diesem Script kann man die Downloadgeschwindigkeit von einer Datei auf eine geswünschte Geschwindigkeit ausbremsen.

    Ist sehr nützlich, wenn man keine schnelle Anbindung des Servers hat.

    PHP-Code:
     <? 
        $file = 'lala.zip'; 

        $limit = 10; // Hier gibt man ein, wie viel Kilobyte pro Sekunde max. geladen werden dürfen. 
        $verzeichnis = '/srv/www/html/downloads/'; // Downloadverzeichnis 
        $rundeslimit = round($limit*1024); // Kilobytewert in Byte umrechnen 
         
        header('Cache-control: private'); 
        header('Content-type: application/octetstream');  
        header('Content-Length: '.filesize($verzeichnis.$file)); 
        header('Content-Disposition: attachment; filename='.$file);  
        // Attachementheader senden 
         
        flush(); 
        $fd = fopen($verzeichnis.$file, 'r'); 
        while(!feof($fd))  
        { 
            echo fread($fd, $rundeslimit); 
            flush(); 
            sleep(1); 
        } 
        fclose ($fd); 
        // Die Speed-Sperre wird geschaltet 
    ?>
    Mehr zum Script findet Ihr hier: scriptpara.de


  • #2
    Dazu hab ich doch glatt nen paar Fragen: Wieso wird gerundet, wenn eine Ganzzahl mit einer Ganzzahl multipliziert wird (überflüssige Funktion)? Wieso wird ein limit erst gesetzt, dann multipliziert und nie wieder benutzt (überflüssige Variable)? Wass passiert bei Dateien größer als limit*max_execution_time? Default ist 30sec, ergo wären (im Beispiel) Dateien größer als 300kb (was nu wirklich sehr klein ist) nicht möglich.

    Nebenbei gibt round (das hier sowieso sinnlos ist) float zurück. Jede andere Sprache würde hier (berechtigt) meckern wegen Typfehler --> unschöner Stil.
    Nicht jeder Fehler ist ein Bug.

    Kommentar


    • #3
      Zitat von KingCrunch Beitrag anzeigen
      Dazu hab ich doch glatt nen paar Fragen: Wieso wird gerundet, wenn eine Ganzzahl mit einer Ganzzahl multipliziert wird (überflüssige Funktion)? Wieso wird ein limit erst gesetzt, dann multipliziert und nie wieder benutzt (überflüssige Variable)? Wass passiert bei Dateien größer als limit*max_execution_time? Default ist 30sec, ergo wären (im Beispiel) Dateien größer als 300kb (was nu wirklich sehr klein ist) nicht möglich.

      Nebenbei gibt round (das hier sowieso sinnlos ist) float zurück. Jede andere Sprache würde hier (berechtigt) meckern wegen Typfehler --> unschöner Stil.
      Also round wird wohl drinne sein, weil man das limit selbst setzen kann, und man deshalb auch einer ungerade Zahl reinschreiben kann.. Könnte aber mit if (($limit % 2) == 0) noch überprüft werden. Limit wird gesetzt, multipliziert und in fread nochmal benutzt, oder sehe ich das falsch?

      max_execution_time ist bei mir zumindestens mal 60 sec und keine 30.

      Oder hab ich da jetzt irgendwas falsch verstanden? Typefehler wäre ausserdem nur wieder, wenn man nicht prüft ob $limit gerade oder ungerade ist.


      Ambience
      Ich gebe gerne ICQ-Support gegen ein kleines Endgelt.

      Kommentar


      • #4
        Auch ungerade Ganzzahlen ergeben bei einer Multiplikation mit einer Ganzzahl Ganzzahlen (schöner Satz ) Demnach ist das round da wirklich überflüssig.
        Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
        Mark Twain

        Kommentar


        • #5
          Könnte aber mit if (($limit % 2) == 0) noch überprüft werden.
          Kann man. Igäl hat mir den Text geklaut Naja, zumindest prüfst du damit auf eine gerade Zahl. Was das mit Kommazahlen und round zu tun hat ... ^^
          PHP-Code:
          <?php
          $zahl 
          22;
          if ((
          $zahl 2) === 0) { // wird ausgeführt
            
          $zahl round ($zahl);
          }
          echo 
          $zahl// 22.0
          ?>
          Limit wird gesetzt, multipliziert und in fread nochmal benutzt, oder sehe ich das falsch?
          Siehst du falsch: Dort wird $rundesLimit verwendet. Warum dann nicht gleich $limit = 10 * 1024 und $limit verwenden?
          max_execution_time ist bei mir zumindestens mal 60 sec und keine 30.
          Schön, aber einerseits bin ich vom Standard-Wert lauf Manual ausgegangen und zweitens wäre das immer noch süße 600kB
          Typefehler wäre ausserdem nur wieder, wenn man nicht prüft ob $limit gerade oder ungerade ist.
          Was hattn das mit gerade und ungerade zu tun? Man kann doch wohl eine ungerade Anzahl Bytes auslesen. Und den Typfehler in der Form gibs ja in PHP sowieso nicht. Nur merkwürdige Verhalten von merkwürdigen Type-Conversions

          Ganz nebenbei elementare Mathematik: Jede ganze Zahl multipliziert mit einer geraden ganzen Zahl, ergibt eine gerade, ganze Zahl
          Nicht jeder Fehler ist ein Bug.

          Kommentar


          • #6
            hmm

            PHP-Code:
            <?php
            $zahl 
            22;
            if ((
            $zahl 2) === 0) { // wird ausgeführt
              
            $zahl round ($zahl);
            }
            echo 
            $zahl// 22.0
            ?>
            war eigentlich so nicht gemeint... Wenn $zahl % 2 == 0, brauchst du nicht runden, da zahl gerade ist... andernfalls rudnen...

            Ambience
            Ich gebe gerne ICQ-Support gegen ein kleines Endgelt.

            Kommentar


            • #7
              Aber eine Ganzzahl gerundet ergibt immer sich selbst Oo ....

              PHP-Code:
              <?php
              $zahl 
              23// man beachte: Ungerade
              echo round ($zahl); // 23.0
              ?>
              Nicht jeder Fehler ist ein Bug.

              Kommentar


              • #8
                *rumkugel*

                2:0 für King *g*

                Made my day sorry. Musste ich sagen, konnt net anders. Fakto, limit und round ist wie schon erwähnt unnötig. Max_execution_time stellt auch ein Problem dar.

                Auch wenn man von 30 sek also 300kb ausgeht und keine größeren Dateien über das Script downloaded, hat man ein Problem. Was wenn der Downloader, der downloaded, schon etwas anderes downloaded und weniger als 10kb/s für den Transfer zur verfügung hat? Er kann es nicht downloaden (wenn die Datei annähernd an den 300kb ist).

                Hmm.
                "Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)

                Kommentar


                • #9
                  Fazit: Download-Begrenzer und Co sind alles billige Workarounds. Effektiver arbeitet man direkt am Webserver oder noch besser per FTP. Zudem sollte man nicht vergessen: Wer schneller downloaded, ist auch schneller fertig
                  Nicht jeder Fehler ist ein Bug.

                  Kommentar

                  Lädt...
                  X