0

RapidShare でホストされているファイルがあり、それを自分の Web サイトで提供したいと考えています。基本的に、ユーザーが を要求するhttp://site.com/download.php?file=whatever.txtと、スクリプトはファイルを RapidShare からユーザーにストリーミングする必要があります。

頭を悩ませている唯一のことは、適切にストリーミングする方法です。cURL を使用したいのですが、RapidShare からのダウンロードをチャンクで読み取って、それをユーザーにエコーできるかどうかわかりません。これまでに考えた最善の方法は、fopen、fread、ファイルのチャンクをユーザーにエコーし、フラッシュし、ファイル全体が転送されるまでそのプロセスを繰り返すことを組み合わせて使用​​することです。

PHP関数も知ってreadfile()いますが、それが最善の選択肢でしょうか? これらのファイルのサイズは数 GB になる可能性があることに注意してください。サーバーには 16 GB の RAM がありますが、メモリの使用量をできるだけ低く抑えたいと考えています。

アドバイスありがとうございます。

4

1 に答える 1

2

HTTPには「範囲」と呼ばれるヘッダーがあり、基本的にファイルの任意のチャンクをフェッチできます(ファイルサイズがすでにわかっていることを知っています)が、PHPはマルチスレッドに対応していないため、使用するメリットはありません。それ。

Afaik、RAMをすべて消費したくない場合は、2つの手順を実行するしかありません。

fopen()まず、 / (またはストリームを使用できる任意のphp関数)を使用してリモートファイルをストリーミングしfread()、読み取りを小さなチャンクに分割し(2048ビットで十分な場合があります)、結果をに書き込み/追加してからtempfile()、「エコー」して一時ファイルを読み取ることによってユーザー。

このように、ファイル2Toでさえ、ファイルのチャンクとハンドルのみがメモリにあるため、基本的に2048ビットを消費します。

また、ファイルが大量にダウンロードされた場合にリモート読み取りプロセスを回避するために、ダウンロード済みのファイルをキャッシュして保持するためのある種のプロキシマネージャーを作成することもできます(一定期間ローカルに保持します)。

于 2012-06-13T01:51:23.430 に答える