index.php内での Zend_Application 基本的なキャッシュ方法


Bootstrap内ではiniファイルなどの設定ファイルを丁寧にキャッシュやZend_Registryなどに格納して最適化をはかりますが、
どうしてもautoloader用のiniファイルやapplication.iniファイルなどBootstrap内で呼ばれる順番が早いため最適化出来ないファイル群があります。

今回はそんな可哀想な設定ファイルたちの救済措置の一例です。

Zend_Cacheの下準備

Zend_Cache定義のためにフロントエンド、バックエンドオプションを設定します。


$frontendOptions = array(
    'name' => 'File',
    'params' => array(
        'lifetime' => null,
        'automatic_cleaning_factor' => 0,
        'automatic_serialization' => true,
        'master_files' => array(
            APPLICATION_PATH . "/config/application.ini",
            APPLICATION_PATH . '/config/autoloader.ini',
            APPLICATION_PATH . '/config/config.ini'
          )
      )
  );
$backendOptions = array(
    'name' => 'File',
    'params' => array(
        'cache_dir' => APPLICATION_PATH . '/tmp/cache/config',
      )
  );
$configCache = Zend_Cache::factory(
    $frontendOptions['name'],
     $backendOptions['name'],
      $frontendOptions['params'],
       $backendOptions['params']
  );

Zend_Cacheの定義

キャッシュが存在しないまたは変更などがおこなわれた場合はキャッシュ化を行います。


$finalConfig = null;
if (!($finalConfig = $configCache->load('configuration'))) {
    $configFiles = array(
        APPLICATION_PATH . "/config/application.ini",
         APPLICATION_PATH . '/config/autoloader.ini',
          APPLICATION_PATH . '/config/config.ini'
      );
    $masterConfig = null;
    foreach($configFiles as $file) {
      $config = new Zend_Config_Ini(
                    $file, APPLICATION_ENV,
                     array('allowModifications'=>true)
                  );
      if (is_null($masterConfig)) {
        $masterConfig = $config;
      }
      else {
        $masterConfig->merge($config);
      }
    }
    $finalConfig = $masterConfig->toArray();
    $configCache->save($finalConfig, 'configuration');
}

Zend_Applicationの定義

出来上がった$finalConfigをZend_Applicationの第2引数にぶち込んで終了です。とても簡単です

/**
 * Run the application
 * Use Zend_Application
 */
$application = new Zend_Application(
    APPLICATION_ENV,
     $finalConfig
  );
  $application->bootstrap()->run();

全ソースコード

    /** Zend_Cache */
    require 'Zend/Cache.php';

    /** Zend_Config_Ini */
    require 'Zend/Config/Ini.php';

    $frontendOptions = array(
        'name' => 'File',
        'params' => array(
            'lifetime' => null,
            'automatic_cleaning_factor' => 0,
            'automatic_serialization' => true,
            'master_files' => array(
                APPLICATION_PATH . "/config/application.ini",
                APPLICATION_PATH . '/config/autoloader.ini',
                APPLICATION_PATH . '/config/config.ini'
              )
          )
      );
    $backendOptions = array(
        'name' => 'File',
        'params' => array(
            'cache_dir' => APPLICATION_PATH . '/tmp/cache/config',
          )
      );
    $configCache = Zend_Cache::factory(
        $frontendOptions['name'],
         $backendOptions['name'],
          $frontendOptions['params'],
           $backendOptions['params']
      );

    $finalConfig = null;
    if (!($finalConfig = $configCache->load('configuration'))) {
        $configFiles = array(
            APPLICATION_PATH . "/config/application.ini",
             APPLICATION_PATH . '/config/autoloader.ini',
              APPLICATION_PATH . '/config/config.ini'
          );
        $masterConfig = null;
        foreach($configFiles as $file) {
          $config = new Zend_Config_Ini(
                        $file, APPLICATION_ENV,
                         array('allowModifications'=>true)
                      );
          if (is_null($masterConfig)) {
            $masterConfig = $config;
          }
          else {
            $masterConfig->merge($config);
          }
        }
        $finalConfig = $masterConfig->toArray();
        $configCache->save($finalConfig, 'configuration');
    }

    /**
     * Run the application
     * Use Zend_Application
     */
    require 'Zend/Application.php';
    $application = new Zend_Application(
        APPLICATION_ENV,
         $finalConfig
      );
      $application->bootstrap();
      $application->bootstrap()->run();

他にも色々やり方はあると思いますが、あまり窮屈に考えず緩く考えた場合
このぐらいが基本と言えるのではないでしょうか。

The following two tabs change content below.

ロゴスウェア

ロゴスウェア株式会社は、インターネットや情報技術を使って学習に革新的進化をもたらす製品を開発することを目標に、2001年7月に設立されたテクノロジー系ベンチャー企業です。

最新記事 by ロゴスウェア (全て見る)

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>