アプリケーションのバックポート
前の節では自動的に作成したアプリケーションを無理矢理PHP 5.1系の動いている環境で動かしてみました。しかし、これは動作が保証されない状態ですので、あまりお勧めできるものではありません。そこで、先程と似たような条件ですが、PHP 5.1系の動いている環境にZend Framework 1.6系をインストールして、その上でZend Framework 1.10で作成したプロジェクトを実行してみましょう。
上と同様に、プロジェクトをそのまま実行しようとするとエラーで停止してしまいます。これは、プロジェクトのindex.phpでZend_Applicationコンポーネントを利用しているからです。そこで、Zend_Applicationコンポーネントなどを利用しないように少し手を入れて動作するようにしましょう。
index.php の置き換え
新しいプロジェクト内でのindex.phpの動作は次のようになっています:
- ファイルの置かれているパスなどの設定
- インクルードパスの設定
- Zend_Applicationコンポーネントの初期化と実行
このうち(3)を置き換えてZend Framework 1.6系で利用できるようにします。Zend_Applicationコンポーネントの内部ではアプリケーションの部品の作成(ブートストラップ)とフロントコントローラへの処理のディスパッチが行われています。また、標準ではブートストラップの際に作成されるのはフロントコントローラだけです。
そこで(3)の処理の代わりにフロントコントローラの作成とディスパッチを行うような処理を入れてやれば、他の部分に問題がなければアプリケーションが動作するはずです。まず、置き換えた部分を示します。
/** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
▼
/* フロントコントローラーの呼び出し */ require_once 'Zend/Controller/Front.php'; $front_controller = Zend_Controller_Front::getInstance(); $front_controller->setControllerDirectory(APPLICATION_PATH.'/controllers'); $front_controller->dispatch();
このような修正を行ってアプリケーションを実行してみます。
これで、最低限アプリケーションが実行できるようになりました。
設定ファイルの読み込み
Zend Applicationコンポーネントには主に3つの機能があります。先程述べたブートストラップ、フロントコントローラへのディスパッチ以外に、設定ファイル(application.ini)の読み込みがあります。
この設定ファイルには、コンポーネントに関する設定と、PHPの挙動を制御する設定とが記述されています。この「PHPの挙動を制御する設定」には、例えばエラーメッセージの表示等に関する設定もあります。そこで、この設定を読み込む機能をつけ加えることにしましょう。この機能を「Optionsクラス」で実装します。
まず、このクラスのコンストラクタから見ていきましょう。
class Options { ... private function __construct() { /* (1)設定ファイルの読み込み */ $config_file = APPLICATION_PATH . '/configs/application.ini'; $this->config = new Zend_Config_Ini($config_file, APPLICATION_ENV); $this->options = $this->config->toArray(); /* (2)PHP関係の設定 */ if (!empty($this->options['phpsettings'])) { $this->setPhpSettings($this->options['phpsettings']); } } }
ここでは、まず(1)設定ファイル(application.ini)を読み込んでいます。これはZend_Configコンポーネントを利用してINIファイルを解釈し、それを配列に変換しています。
次に(2)その設定に「phpsettings」という項目があった場合には、解釈にまわしています。この処理を実際に行っているのが「setPhpSettingsメソッド」です。
class Options { ... private function setPhpSettings(array $settings, $prefix = '') { /* (1)与えられた配列の各要素について見ていく */ foreach ($settings as $key => $value) { $key = empty($prefix) ? $key : $prefix . $key; if (is_scalar($value)) { ini_set($key, $value); //(2) } elseif (is_array($value)) { $this->setPhpSettings($value, $key . '.'); //(3) } } } ... }
ここでは、(1)まず大きなループで与えられた配列の各要素を見ていきます。もし値が(2)配列でないのなら、そのままPHPの「ini_set関数」を呼び出してPHPの環境を設定し、もし(3)配列だったら再帰的に自分自身を呼び出します。
おわりに
今回はPHP 5.1系が稼動している環境で、新しいZend Frameworkの機能であるプロジェクトの自動作成機能を利用したプロジェクトを使用する方法について説明しました。新しい機能を活用したり、新しい環境への移行を睨みつつ、古い環境でアプリケーションを運用する際のヒントになると思います。