LoginSignup
7
7

More than 5 years have passed since last update.

Goutteでプログレス表示をしてみる

Last updated at Posted at 2014-05-08

今日はお遊び投稿!

CLIで何かをダウンロードするようなコマンドを作る時に進捗が表示されるとイライラが多少は軽滅されますよね!
特に時間のかかるものをダウンロードする時に何も表示されなかったら「まだかよ!」ってなりますね。

そこで今日はPHPでGoutteを使ってダウンロードプログレスを表示してみようと思います。

コードはこんな感じになります。

download.php
<?php

require __DIR__ . '/vendor/autoload.php';

use Goutte\Client;
use Guzzle\Http\Client as GuzzleClient;

$guzzleClient = new GuzzleClient('', array(
    GuzzleClient::DISABLE_REDIRECTS => true,
    GuzzleClient::CURL_OPTIONS => array(
        CURLOPT_NOPROGRESS => false,
        CURLOPT_PROGRESSFUNCTION => function ($download_size, $downloaded, $upload_size, $uploaded) {
            if (0 < $download_size) {
                printf("dowloading... %d%%\r", $downloaded / $download_size  * 100);
                flush();
            }
        }
    )
));
$client = new Client();
$client->setClient($guzzleClient);
$client->request('GET', 'http://example.com/');

これを実行すると

$ php download.php
dowloading... 14%

みたいな感じで進捗率が表示されるようになります。

Goutteは内部でGuzzleクライアント使ってるのでオプションを指定したGuzzleクライアントをセットする事で内部の挙動を変更できるようになっています。

これで待ち時間のイライラが軽滅されますね。

wgetとかcurlでいいだろ!と突っ込まれそうですがそこはお遊びということで^^
ではでは!

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7