SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

古いPHPを利用した新しいZend Frameworkの利用法

Zend Frameworkによる実践的なPHPアプリケーション開発 28(番外編)

  • X ポスト
  • このエントリーをはてなブックマークに追加

アプリケーションのバックポート

 前の節では自動的に作成したアプリケーションを無理矢理PHP 5.1系の動いている環境で動かしてみました。しかし、これは動作が保証されない状態ですので、あまりお勧めできるものではありません。そこで、先程と似たような条件ですが、PHP 5.1系の動いている環境にZend Framework 1.6系をインストールして、その上でZend Framework 1.10で作成したプロジェクトを実行してみましょう。

 上と同様に、プロジェクトをそのまま実行しようとするとエラーで停止してしまいます。これは、プロジェクトのindex.phpでZend_Applicationコンポーネントを利用しているからです。そこで、Zend_Applicationコンポーネントなどを利用しないように少し手を入れて動作するようにしましょう。

index.php の置き換え

 新しいプロジェクト内でのindex.phpの動作は次のようになっています:

  1. ファイルの置かれているパスなどの設定
  2. インクルードパスの設定
  3. Zend_Applicationコンポーネントの初期化と実行

 このうち(3)を置き換えてZend Framework 1.6系で利用できるようにします。Zend_Applicationコンポーネントの内部ではアプリケーションの部品の作成(ブートストラップ)とフロントコントローラへの処理のディスパッチが行われています。また、標準ではブートストラップの際に作成されるのはフロントコントローラだけです。

 そこで(3)の処理の代わりにフロントコントローラの作成とディスパッチを行うような処理を入れてやれば、他の部分に問題がなければアプリケーションが動作するはずです。まず、置き換えた部分を示します。

[リスト2] index.phpの書き換え
/** 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();

 このような修正を行ってアプリケーションを実行してみます。

図2 自動作成したプロジェクトをZend Framework1.6系上で動かす
図2 自動作成したプロジェクトをZend Framework1.6系上で動かす

 これで、最低限アプリケーションが実行できるようになりました。

設定ファイルの読み込み

 Zend Applicationコンポーネントには主に3つの機能があります。先程述べたブートストラップ、フロントコントローラへのディスパッチ以外に、設定ファイル(application.ini)の読み込みがあります。

 この設定ファイルには、コンポーネントに関する設定と、PHPの挙動を制御する設定とが記述されています。この「PHPの挙動を制御する設定」には、例えばエラーメッセージの表示等に関する設定もあります。そこで、この設定を読み込む機能をつけ加えることにしましょう。この機能を「Optionsクラス」で実装します。

 まず、このクラスのコンストラクタから見ていきましょう。

[リスト3] 設定の読み込み(index.php)
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メソッド」です。

[リスト4] PHPの設定の処理
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の機能であるプロジェクトの自動作成機能を利用したプロジェクトを使用する方法について説明しました。新しい機能を活用したり、新しい環境への移行を睨みつつ、古い環境でアプリケーションを運用する際のヒントになると思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5240 2010/07/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング