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

M. *_*nov 9 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);
};
Run Code Online (Sandbox Code Playgroud)

这真的是异步吗?

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

在创建请求时,是否有更直接的方式来判断响应应存储在何处?(或直接传递流).

loc*_*inz 15

sink选项应该是你的朋友在这里:

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

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