1

我知道有很多类似的帖子,但是在抓取之后,仍然没有找到答案。

我正在寻找一个脚本来充当下载大型远程图像(每个大约 10mb)的代理。到目前为止,我正在使用 curl 读取远程图像 url,然后使用 headers 来强制下载。像(不是完整的脚本):

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;

这行得通,但是有没有更好的方法,因为这个脚本可能会看到相当多的流量 - 可能是 300 个并发用户,每个用户有 10 个请求?

图像将从同一网络上的服务器提供。

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 回答