1

これに似た投稿がたくさんあることは知っていますが、SOをクロールした後でも、答えは見つかりませんでした。

大きなリモートイメージ(それぞれ約10MB)をダウンロードするためのプロキシとして機能するスクリプトを作成しようとしています。これまでのところ、curlを使用してリモートイメージのURLを読み取り、ヘッダーを使用して強制的にダウンロードしています。次のようなもの(完全なスクリプトではありません):

function getRemoteFile($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 50);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

header('Content-Type: octet/stream');
header('Content-Disposition: attachment; filename="random.jpg"');
header('Content-Length: ' . strlen($file));
echo $file;

これは機能しますが、このスクリプトではかなりの量のトラフィックが発生する可能性があるため、より良い方法はありますか?おそらく、それぞれ10個のリクエストを持つ300人の同時ユーザーですか?

画像は同じネットワーク上のサーバーから提供されます。

4

1 に答える 1

1

10mbでかなり大きい300 concurrent users with 10 requestsです。

あなたが言っています10 * 300 * 10 = 30,000 MB = 30GB

ジョブキューを使用することをお勧めします

使用できますGearman

$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("download", "getRemoteFile");
while ($worker->work());

AJAXを使用して、画像がダウンロードされているかどうかを確認して表示することはできません

また、以下をご覧になることをお勧めします

于 2012-10-08T14:23:50.473 に答える