
公開されていない大きなファイル (1~8 GB) がいくつかあります。現在、これらのファイルは PHP スクリプトで提供されており、1 MB のチャンクでファイルをバッファリングして出力に書き込んでいます。これは CPU を非常に消費するため、ダウンロードが少数しかアクティブでない場合にサーバーの速度が低下します。ファイル転送作業を Apache またはより効率的な方法に移行したいと考えています。Cookie 認証を使用しています。既存の PHP セッション Cookie を介して FTP セッションを認証する方法がない限り、FTP ダウンロードは利用できません。
理想的には、PHP を使用してファイルへのリンクを非表示にし、ファイル転送作業を Apache に渡すことができるようなものが必要です。Apache は、HTTP ファイル転送において PHP よりもはるかに効率的であることは間違いありません。ダウンロードも再開できるようにしたいと考えています。
どのような助けでも大歓迎です。
答え1
X-Sendfileは、このタイプの操作のために特別に作られています。詳細については、http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/
答え2
mod_auth_tkt は興味深いですね。Apache/PHP セットアップが UNIX 上でホストされている場合のローテクなソリューションは次のとおりです。
ダウンロードしたファイルを Web からアクセスできないディレクトリに保存し、PHP スクリプトを使用してそのディレクトリに固有のシンボリック リンクを作成します。その後、指定した期間 (例: 24 時間後) が経過したら、シンボリック リンクを削除できます。
以下に例を示します。ファイルは /private に保存され、.htaccess ファイルによって保護されているものとします。また、Apache を実行するユーザーが書き込み可能な /public ディレクトリもあります。
疑似コード:
- ユーザーはダウンロードページに移動します
- PHP スクリプトは、シンボリック リンクのファイル名として使用される一意のダウンロード ID を生成します (例: 79467404-7585-11df-9ead-0022190d59d2)
- PHP スクリプトは /public/79467404-7585-11df-9ead-0022190d59d2 から /private/file1 へのシンボリック リンクを作成します。
- PHPスクリプトはユーザーをhttp://example.com/public/79467404-7585-11df-9ead-0022190d59d2ファイルのダウンロードを許可する
その後、cronjob を使用して「find /public -type l -mtime +24 -exec rm {} \;」または同様のものを実行し、期限切れのシンボリックリンクを削除できます。(注意: find を使用してファイルを削除する場合は、十分に注意してください。)
このソリューションでは、誰かが今後 24 時間リンクを共有することを防ぐことはできないため、それが重要な状況ではおそらく適切ではありません。ただし、追加の Apache モジュールなどは必要ありません。
答え3
このServerfaultの質問関連する可能性があります。あるいは、次のようなものを使用することもできますモジュール。
答え4
私は、オンラインで FTP アカウントにアクセスするための純粋な HTML/PHP インターフェイスである Net 2 FTP というサービスを使用しました。ソフトウェアのダウンロードとインストールは比較的簡単に行え、Web サイトが非常に小さいためオーバーヘッドも発生しません。
このソフトウェアは非常に便利で使いやすく、あなたの用途にぴったりだと思います。
ホームページはhttp://www.net2ftp.com/完全にフリーウェアです。