Ankündigung

Einklappen
Keine Ankündigung bisher.

URL bei Dateidownload unsichtbar machen

Einklappen

Neue Werbung 2019

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

  • URL bei Dateidownload unsichtbar machen

    Hallo!

    Hab ein Problem und auch schon ewig lang rumgesucht, das Problem ist nur, man weiß nichtmal so recht, wonach man eigentlich suchen soll

    Und zwar geht's um folgendes:
    Stellt euch vor, ihr loggt euch auf einer Download-Seite ein. Nun habt ihr das Recht, bestimmte Dateien runterzuladen, diese werden untereinander in Form von Textlinks (ohne URL) aufgelistet.

    Nun kann also nur ein eingeloggter User an die Dateien ran. Blöd wäre aber, wenn er sich ganz einfach die URL der Datei kopiert und weitergibt, dann hat die ganze Einloggerei ja keinen Sinn mehr, da direkt auf die Datei zugegriffen werden kann. Und das will ich verhindern.

    Meine Idee war zunächst, die Datei einfach in ein mit .htaccess geschützes Verzeichnis zu tun. Somit kann von außen nicht zugegriffen werden. Kann es aber das PHP-Skript? Und wie würde ich es dann anstellen, daß es funktioniert?
    Wenn ich den Link direkt angeben würde, würde es ja wieder Probleme geben, da vom User die .htaccess-Daten abgefragt werden. Wenn ich es über ein PHP-Skript mache, habe ich gehört, kann es Probleme geben, wenn die Datei zu groß ist.

    Hat jemand eine Idee, wie man das ganze realisieren kann, so daß es wirklich funktioniert?

    Schöne Grüße und schonmal vielen Dank
    ZeHa


  • #2
    http://inphpfriend.de/forum/showthread-t_70.html
    privater Blog

    Kommentar


    • #3
      Okay, erstmal vielen Dank, das Beispiel sieht wirklich schon ganz gut aus!

      Nur noch eine Frage, bevor ich das jetzt alles einbaue: ein Kumpel hat mir erzählt, daß es bei readfile() vorkommen kann, daß der Download abbricht, wenn die Datei zu groß ist. Stimmt das so? Wenn ja, wie umgeh ich das?

      Kommentar


      • #4
        Das ist höchst wahrscheinlich eine Einstellung in der php.ini in welcher die maximale Dateigröße für zu bearbeitende, bzw. zu cachende (Arbeitsspeicher) Dateien angibt. Da wirst du wahrscheinlich nicht viel drehen können. Ansonsten (hab mir das Beispiel noch nicht angeschaut) könntest du über die .htacces den direkten Zugriff auf Dateien verbieten und somit nur noch verarbeitenden Skripten zur Verfügung stellen.

        Beispiel:
        Code:
        DirectoryIndex index.php
        <FilesMatch "\.jpg$">
        Order allow,deny
        deny from all
        </FilesMatch>
        <FilesMatch "index.php$">
        Order allow,deny
        allow from all
        </FilesMatch>
        <FilesMatch "\.(inc|php)$">
        Order allow,deny
        deny from all
        </FilesMatch>
        If you read this message backward, Satan will force you to smoke marijuana.
        Gute Tutorials

        Kommentar


        • #5
          Das war auch meine erste Überlegung. Nur hab ich dann nicht wieder das gleiche Problem? Wenn die Datei in einem geschützten Verzeichnis liegt, kommt von außen keiner drauf. Die PHP-Datei schon, aber die muß dann ja wieder eine Funktion beinhalten, die dem User die Datei dann anbieten kann. Und hier gibt's doch dann wieder das "time out"-Problem, oder?

          Kommentar


          • #6
            Und genau das hab ich gemeint, das eben nur über ein verarbeitendes Script Zugriff auf die Datei gewährt wird, damit ist nämlich sicher gestellt, dass eben nur im Umfeld der Anwendung ein Zugriff geschieht und dass unregistrierte Benutzer, oder Serverexterne Quellen (z.B. Google) nicht darauf zugreifen können.
            If you read this message backward, Satan will force you to smoke marijuana.
            Gute Tutorials

            Kommentar


            • #7
              Ja genau - so denke ich auch! Aber trotzdem bleibt die Frage: wie verhindere ich den "time out" bei einer zu großen Datei?

              Kommentar


              • #8
                (Also wenn ich auf php.ini keinen Zugriff habe)

                Kommentar


                • #9
                  Ergebe dich deinem Schicksal :wink:
                  If you read this message backward, Satan will force you to smoke marijuana.
                  Gute Tutorials

                  Kommentar


                  • #10
                    Argh, ich verzweifel hier gerade

                    Hab versucht, das Beispiel mal zu testen, aber ich krieg die ganze Zeit einen Parse Error, und zwar an der Stelle, wo das Array definiert wird!

                    PHP-Code:
                    $files = array( 
                                    
                    "1" => "test.htm",
                                    
                    "2" => "text.txt"
                                    
                    "3" => "doc.pdf"
                                    
                    "4" => "bild3.jpg"
                                  ); 
                    Hab auch schon in anderen PHP-Hilfen nachgeschaut, aber dort werden Arrays genau gleich definiert! Woran kann es liegen, daß es bei mir nicht funktioniert?

                    Kommentar


                    • #11
                      LOL was wird denn das?! Wenn ich die Anführungszeichen durch Hochkommas ersetze, funktioniert es komischerweise!

                      Kommentar


                      • #12
                        Okay, vergeßt mein letztes Problem, es hat nun funktioniert.

                        ABER der Download bricht tatsächlich nach 2 Minuten ab, und das darf nicht sein. Hat jemand eine Idee, wie man das hinkriegen kann? Kann man die Datei irgendwie in einzelne Pakete aufteilen, wovon der User aber nix mitkriegt?

                        Weil sonst klappt das ja nur bei kleinen Dateien oder bei schnellen Verbindungen...

                        Kommentar


                        • #13
                          Hab nun endlich 'ne Lösung gefunden im Netz... damit hier alle was davon haben, hier die Funktion (die man statt readfile() benutzt):

                          PHP-Code:
                          <?php
                          function readfile_chunked($filename,$retbytes=true) {
                             
                          $chunksize 1*(1024*1024); // how many bytes per chunk
                             
                          $buffer '';
                             
                          $cnt =0;
                             
                          // $handle = fopen($filename, 'rb');
                             
                          $handle fopen($filename'rb');
                             if (
                          $handle === false) {
                                 return 
                          false;
                             }
                             while (!
                          feof($handle)) {
                                 
                          $buffer fread($handle$chunksize);
                                 echo 
                          $buffer;
                                 if (
                          $retbytes) {
                                     
                          $cnt += strlen($buffer);
                                 }
                             }
                                 
                          $status fclose($handle);
                             if (
                          $retbytes && $status) {
                                 return 
                          $cnt// return num. bytes delivered like readfile() does.
                             
                          }
                             return 
                          $status;
                          }
                          ?>

                          Kommentar

                          Lädt...
                          X