web-dev-qa-db-ja.com

PHPおよび/またはApacheを介して大きなファイルのダウンロードを保護するにはどうすればよいですか?

公開されていない大きなファイル(1〜8 GB)がいくつかあります。現在、1MBのチャンクでファイルをバッファリングして出力に書き込むPHPスクリプトを介してそれらを提供しています。これは非常にCPUを集中的に使用し、アクティブなダウンロードが数回しかない場合はサーバーの速度を低下させます。 。ファイル転送作業をApacheまたはより効率的な方法に移行したい。Cookie認証を使用している。既存のPHPセッションCookie)を介してFTPセッションを認証する方法がない限り、FTPダウンロードは実行されない。

理想的には、PHPを使用して、ファイル転送作業をApacheに渡す間、ファイルへのリンクを非表示にできるものが必要です。これは、HTTPファイル転送の方が間違いなくはるかに効率的です。 PHP。ダウンロードも再開できるようにしたいと考えています。

どんな助けでも大歓迎です。

4
Eric

X-Sendfileは、このタイプの操作専用に作成されています。あなたはそれについて読むことができます http://codeutopia.net/blog/2009/03/06/sending-files-better-Apache-mod_xsendfile-and-php/

2
kolbyjack

mod_auth_tktは面白そうです。 UNIXでホストされているApache/PHPセットアップの場合のローテクソリューションは次のとおりです。

ダウンロードをWebにアクセスできないディレクトリに保存し、PHPスクリプトを使用して、一意のシンボリックリンクを作成します。その後、指定した期間(24時間後など)後にシンボリックリンクを削除できます。 。

これが例です。ファイルが/ privateに保存され、.htaccessファイルで保護されていると仮定します。また、Apacheを実行しているユーザーが書き込み可能な/ publicディレクトリもあります。

擬似コード:

  1. ユーザーがダウンロードページに移動します
  2. PHPスクリプトは、シンボリックリンクファイル名として使用される一意のダウンロードIDを生成します(例:79467404-7585-11df-9ead-0022190d59d2)
  3. PHPスクリプトは、/ public/79467404-7585-11df-9ead-0022190d59d2から/ private/file1へのシンボリックリンクを作成します
  4. PHPスクリプトはユーザーを http://example.com/public/79467404-7585-11df-9ead-0022190d59d2 ファイルのダウンロードを許可するようにリダイレクトします

次に、cronjobを使用して、「find/public -type l -mtime +24 -exec rm {} \;」を実行できます。または、期限切れのシンボリックリンクの削除に似たもの。 (注:ファイルの削除にfindを使用する場合は十分に注意してください。)

このソリューションは、誰かが次の24時間リンクを共有することを妨げるものではないため、それが重要な状況ではおそらく適切ではありません。ただし、追加のApacheモジュールなどは必要ありません。

2
Deutsch

このServerfaultの質問 関連している可能性があります。または、 mod_auth_tkt のようなものを使用することもできます。

0
Daniel Waechter

私は、FTPアカウントにオンラインでアクセスするための純粋なhtml/PHPインターフェースであるサービスコールNet2FTPを使用しました。ソフトウェアは比較的簡単にダウンロードしてインストールでき、非常に小さなWebサイトであるため、オーバーヘッドはありません。

このソフトウェアは非常に便利で使いやすいです、それはあなたの使用法に最適であるように思えます。

ホームページは http://www.net2ftp.com/ 、完全にフリーウェアです。

0
NickDodd