今日はお遊び投稿!
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でいいだろ!と突っ込まれそうですがそこはお遊びということで^^
ではでは!