2016-01-21 5 views
6

Guzzleで大きなファイルをダウンロードして、進捗状況を追跡したい。ストリームを渡すか、RequestMediatorを何とか使う必要があるかどうかはわかりません。Guzzle 6ダウンロードの進捗

  • イベントcurl.callback.progressを購読しようとしましたが、PSR 7リクエストにはイベントディスパッチャがありません。
  • 私はon_statsを試しましたが、コールバックは最後にのみ発生します。
  • 進捗加入者プラグインは、私は以下のコードをテストしていhttps://github.com/guzzle/progress-subscriber

を推奨されていません。

$dl = 'http://archive.ubuntu.com/ubuntu/dists/wily/main/installer-amd64/current/images/netboot/mini.iso'; 
    $client = new Client([]); 

    $request = new GuzzleHttp\Psr7\Request('get', $dl); 
    $promise = $this->client->sendAsync($request, [ 
      'sink' => '/tmp/test.bin' 
    ]); 
    $promise->then(function (Response $resp) use ($fs) { 
     echo 'Finished'; 
    }, function (RequestException $e) { 
    }); 
    $promise->wait(); 

ヒントがあります。

答えて

12

ドキュメントには記載されていませんが、「進捗状況」要求オプションを使用できます。

hereを参照してください。

$options = [ 
    'progress' => function ($dl_total_size, $dl_size_so_far, $ul_total_size, $ul_size_so_far) { 
     // do something. 
    } 
]; 
+0

完璧、ありがとう! – Laoneo