はじめに
本連載では、PHP上で動作するアプリケーションフレームワークであるZend Frameworkについて紹介していきます。今回はプログレスバーを表示するモジュール、Zend_ProgressBarを紹介します。
プログレスバーは、ファイルのアップロードなど、時間のかかる処理の進捗を表示するための部品です。見た目は単純な部品ですが、見栄えのするプログレスバーを作成しようとしたり、必要な情報を計算しようとしたりすると結構面倒です。特にWebページの中にプログレスバーを表示しようとすると、処理の進行に応じてプログレスバーを更新する処理などが必要となり、結構手間がかかります。
Zend_ProgressBarはコンソール向けに表示するための機能とWebページ内に埋め込まれたプログレスバーを更新するための機能が準備されています。今回の記事では、コンソールアプリケーション向けの利用方法と、Webアプリケーション向けの利用方法(プッシュ型)について説明します。
対象読者
PHPの基本構文やについては一通り理解している方を対象としています。
必要な環境
Zend FrameworkはPHP 5.2.4以降とWebサーバがインストールされている環境で利用可能です。本稿ではWebサーバとしてApache 2.2を、OSにWindows XPを採用し、アプリケーションを作成していきます。
以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、「サーバサイド技術の学び舎 - WINGS」より「サーバサイド環境構築設定手順」を参照ください。
- Windows XP SP3
- PHP 5.3.3
- Apache 2.2.16
LinuxやFreeBSDなどUNIX系OSをお使いの方もコマンドはほぼ一緒なので、パスなどは適宜読み替えてください。
Zend_ProgressBarの基本的な動作
Zend_ProgressBarは、コンソールアプリやWebアプリなどで、処理の進捗を表示するモジュールです。他のモジュールでも見られたデザインですが、Zend_ProgressBarは進捗の管理をする本体と、表示を担当するアダプタに分かれています。
利用するアダプタにかかわらず、Zend_ProgressBarの使い方は次の 5段階に分かれています。
- (1)アダプタの作成
- (2)Zend_ProgressBar本体の作成
- (3)処理の実行
- (4)進捗の更新
- (3と4の繰り返し)
- (5)処理の終了
アダプタは3種類(コンソールアプリ用1種類とWebアプリ用2種類)準備されていますが、このうち最も簡単なコンソール用のアダプタZend_ProgressBar_Adapter_Consoleクラスを使った例から見ていきましょう。先程の手順をそのままプログラムにすると、リスト1のようになります:
<?php /* 必要なクラスの読み込み */ require_once 'Zend/ProgressBar.php'; require_once 'Zend/ProgressBar/Adapter/Console.php'; /* (1)アダプタの作成 */ $adapter = new Zend_ProgressBar_Adapter_Console(); /* (2)本体の作成:引数はアダプタと最低値・最高値 */ $progressbar = new Zend_ProgressBar($adapter, 0, 10); /* 処理の実行のループ */ for ($i = 1; $i < 11; $i++) { /* (3)処理の実行:ここではダミーで sleep */ sleep(1); /* (4)進捗の更新 */ $progressbar->update($i); } /* (5)処理の終了 */ $progressbar->finish();
▼
C:\codezine\console>php progressbar_console.php 50% [######-----------------------------] ETA 00:00:05
このサンプルはコンソールから実行するアプリケーションで、実行すると10秒かけてプログレスバーが進んで行きます。また、5秒を過ぎると終了までの予測時間も右側に表示されます。
このサンプルのコードを見てみましょう。まず(1)で表示用のアダプタを作成してから(2)でZend_ProgressBar本体のオブジェクトを作成しています。この(2)でZend_ProgressBarのコンストラクタは利用するアダプタ、進捗の最低値(開始時の値)、進捗の最大値(終了時の値)の3つの引数を取っています。
次に処理の本体と進捗の更新です。このサンプルでは(3)(4)は10回実行されるようになっていて、変数$iが1から10まで変化して進捗を表現しています。このうち(3)で処理の本体を実行し、(4)で進捗をZend_ProgressBarオブジェクトへupdateメソッドで渡しています。
最後に、処理が終了した後に(5)でZend_ProgressBarオブジェクトのfinishメソッドを呼び出します。
「あれ?これだけ?」と思われるかもしれませんが、これだけで画面にプログレスバーが表示されるようになります。例えば画面への描画処理が見当りませんが、それは(4)のupdateメソッド内で実行されています。これはWebアプリ用のアダプタを利用する場合でも同じで、パターンに沿えば、同じくらい簡単にWebページにプログレスバーを埋め込むことができます。
それでは、WebアプリでのZend_ProgressBarの利用方法をについて見ていきましょう。