Webシステム開発 雑記帳 /

PHPでローディングバー!CLIで重い処理をするときにリアルタイムで経過を把握する方法

例えば、大量のデータをデータベースに移行したり、バッチスクリプトでPHPを動かすといったサーバーで重い処理をするとき、バックエンドでPHPを動かして時間のかかる処理をするときがあります。

長時間待っていると、処理が進んでいるかわからなくなりますが、CLI(コマンドライン)で処理をリクエストしてから完了するまでの間、”20%…完了”といった具合に画面上で経過がわかると「処理が進んでいる」と把握することができます。このようなローディングバーを表示させるには自力でプログラムに仕掛けを作る必要があります。

# php -f hogehoge.php
100/100
[================================================>]
100.00% 00:00:00
#

そこで今回は、CLIで重い処理をするときにリアルタイムで処理経過を表示する方法をご紹介します。
尚、今回のローディングバーの実装はPHPライブラリの「PHP-CLI-Progress-Bar」を使います。
また、PHP5.3以上の環境で動かすことを想定しています。


CLIとは?
コマンドラインインタフェース (Command line interface) の略称。 MS-DOSやUnix系あるいはGNU/Linuxシステムにおいて、主にサーバー用途で使用する場合などでは主流となる。 基本的には文字のみのインターフェースで、コマンドを入れて操作する形式となる。

動作環境


設置方法とサンプルコード

ライブラリをサーバ―にアップロードし、PHPプログラムにインクルードします。以下は、ファイル構成です。

|var |
|—-sample |
|———–| ProgressBar ← ライブラリ
|———–| batch.php ← Sample-1
|———–| shellBase.sh< ← Sample-2
|———–| readList.txt ← Sample-2用テキストファイル

Sample-1 コマンドラインでPHPを動かす

batch.phpに引数をつけて処理を実行します。

# php batch.php 100

Sample-2 シェルからコマンドラインを実行する

# ./shellBase.sh

シェルでreadList.txtの行数を抽出し、最大数を変数に格納します。その変数をshellBatch.phpの引数として処理をしています。

↓readList.txt
hogehoge01
~ 省略 ~
hogehoge100

Sample-1、2の実行すると、ループ処理の経過をローディングバーで確認することが出来ます。

100/100
[================================================>]
100.00% 00:00:00

この記事を書いた人

堀孝文

PAGE TOP