Tag Archives: PHP

PHPを5.4に上げるときの注意点

PHP 5.2→5.3に上げるとき http://php.net/manual/ …

Read more »

mysqli_connectでエラー

mysql_connectがPHP 5.5から非推奨になるためmysqli_co …

Read more »

GoogleAppsでZendFrameworkを使用した2-legged OAuth

分かりにくかったので、メモ ■サンプル (ZendFramework 1.11. …

Read more »

Zend_LocaleとZend_Translate

今回は、PHPアプリケーションを英語化するために、Zend_Localeと Ze …

Read more »

Androidがスマートフォンかタブレットかの判別

サーバサイドにて、ブラウザのUserAgentでAndroidがスマートフォンか …

Read more »

PHP開発環境(IDE)

今さらですが・・・。 PHPで開発を行う際、テキストエディタでもファイルが少ない …

Read more »

IEでSSLページのダウンロードでエラーになる

随分前から発生して、知っていたのですが、忘れるのでメモ。 SSL(https)の …

Read more »

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();

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

Read more »