如何使用Guzzle 6异步下载文件?

时间:2015-08-23 22:49:09

标签: php guzzle guzzle6

我正在尝试使用Guzzle 6异步下载文件,但文档似乎含糊不清,无法找到任何有用的示例。

我不确定的是 - 我该如何保存收到的数据?

目前我这样做:

$successHandler = function (Response $response, $index) use ($files) {
    $file = fopen($files[$index], 'a');
    $handle = $response->getBody();

    while (!$handle->eof()) {
        fwrite($file, $handle->read(2048));
    }

    fclose($file);
};

这真的是异步吗?

因为如果我们进入一个回调并开始循环,我们怎样才能同时从其他回复中获取数据呢?

是否有更直接的方式告诉,在创建请求时,应该在何处存储响应? (或者直接传递一个流)。

2 个答案:

答案 0 :(得分:12)

sink选项应该是您的朋友:

$client->request('GET', '/stream/20', [
    'sink' => '/path/to/file',
]);

供参考,请参阅http://docs.guzzlephp.org/en/latest/request-options.html#sink

答案 1 :(得分:3)

id="defaultOpen"