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

  • ZeHa
    hat ein Thema erstellt URL bei Dateidownload unsichtbar machen.

    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

  • ZeHa
    antwortet
    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;
    }
    ?>

    Einen Kommentar schreiben:


  • ZeHa
    antwortet
    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...

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • ZeHa
    antwortet
    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?

    Einen Kommentar schreiben:


  • suendesizer
    antwortet
    Ergebe dich deinem Schicksal :wink:

    Einen Kommentar schreiben:


  • ZeHa
    antwortet
    (Also wenn ich auf php.ini keinen Zugriff habe)

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • suendesizer
    antwortet
    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.

    Einen Kommentar schreiben:


  • ZeHa
    antwortet
    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?

    Einen Kommentar schreiben:


  • suendesizer
    antwortet
    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>

    Einen Kommentar schreiben:


  • ZeHa
    antwortet
    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?

    Einen Kommentar schreiben:


  • imported_Ben
    antwortet
    http://inphpfriend.de/forum/showthread-t_70.html

    Einen Kommentar schreiben:

Lädt...
X