Wie schütze ich große Dateidownloads durch PHP und/oder Apache?

Wie schütze ich große Dateidownloads durch PHP und/oder Apache?

Wir haben einige große Dateien (1-8 GB), die nicht öffentlich zugänglich sind. Derzeit stellen wir sie über ein PHP-Skript bereit, das die Dateien in 1-MB-Blöcken puffert und in die Ausgabe schreibt. Es ist unglaublich CPU-intensiv und verlangsamt den Server, wenn nur wenige Downloads aktiv sind. Wir möchten die Dateiübertragungsarbeit auf Apache oder eine effizientere Methode verschieben. Wir verwenden Cookie-Authentifizierung. FTP-Downloads sind nicht möglich, es sei denn, es gibt eine Möglichkeit, FTP-Sitzungen über das vorhandene PHP-Sitzungscookie zu authentifizieren.

Idealerweise hätten wir gerne etwas, wo wir PHP verwenden können, um den Link zur Datei zu verbergen, während es die Dateiübertragungsarbeit an Apache übergibt, das bei HTTP-Dateiübertragungen zweifellos viel effizienter ist als PHP. Wir möchten auch Downloads fortsetzen können.

Jede Hilfe wird geschätzt.

Antwort1

X-Sendfile wurde speziell für diese Art von Operationen entwickelt. Sie können mehr darüber lesen unterhttp://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/

Antwort2

mod_auth_tkt sieht interessant aus. Hier ist eine einfache Lösung, wenn Ihr Apache/PHP-Setup unter UNIX gehostet wird:

Bewahren Sie Ihre Downloads in einem Verzeichnis auf, auf das nicht über das Web zugegriffen werden kann, und erstellen Sie dann mithilfe eines PHP-Skripts eindeutige symbolische Links dorthin. Anschließend können Sie die symbolischen Links nach einer bestimmten Zeitspanne (z. B. nach 24 Stunden) löschen.

Hier ist ein Beispiel. Angenommen, Ihre Dateien sind in /private gespeichert und durch eine .htaccess-Datei geschützt. Sie haben auch ein /public-Verzeichnis, das vom Benutzer, unter dem Apache ausgeführt wird, beschreibbar ist.

Pseudocode:

  1. Der Benutzer geht zur Download-Seite
  2. Das PHP-Skript generiert eine eindeutige Download-ID, die als Dateiname des symbolischen Links verwendet werden kann (Beispiel: 79467404-7585-11df-9ead-0022190d59d2).
  3. PHP-Skript erstellt einen symbolischen Link von /public/79467404-7585-11df-9ead-0022190d59d2 nach /private/file1
  4. Das PHP-Skript leitet den Benutzer weiter zuhttp://example.com/public/79467404-7585-11df-9ead-0022190d59d2Dateidownload zulassen

Sie können dann einen Cronjob verwenden, um „find /public -type l -mtime +24 -exec rm {} \;“ oder etwas Ähnliches auszuführen, um abgelaufene symbolische Links zu löschen. (NB: Seien Sie sehr vorsichtig, wenn Sie „find“ zum Löschen von Dateien verwenden.)

Diese Lösung verhindert nicht, dass jemand den Link für die nächsten 24 Stunden teilt, daher ist sie wahrscheinlich nicht in Situationen geeignet, in denen das wichtig ist. Sie erfordert jedoch keine zusätzlichen Apache-Module usw.

Antwort3

Diese Serverfault-Fragekönnte damit zusammenhängen. Alternativ könnten Sie etwas wiemod_auth_tkt.

Antwort4

Ich habe einen Dienst namens Net 2 FTP verwendet, eine reine HTML/PHP-Schnittstelle für den Online-Zugriff auf FTP-Konten. Sie können die Software relativ einfach herunterladen und installieren und es entsteht kein Overhead, da es sich um eine so kleine Website handelt.

Diese Software ist äußerst nützlich und einfach zu verwenden. Es hört sich an, als wäre sie perfekt für Ihren Einsatzzweck.

Die Homepage isthttp://www.net2ftp.com/, es ist völlig Freeware.

verwandte Informationen