PHP 5.2→5.3に上げるとき http://php.net/manual/ …
Tag Archives: PHP
mysqli_connectでエラー
mysql_connectがPHP 5.5から非推奨になるためmysqli_co …
GoogleAppsでZendFrameworkを使用した2-legged OAuth
分かりにくかったので、メモ ■サンプル (ZendFramework 1.11. …
Zend_LocaleとZend_Translate
今回は、PHPアプリケーションを英語化するために、Zend_Localeと Ze …
Androidがスマートフォンかタブレットかの判別
サーバサイドにて、ブラウザのUserAgentでAndroidがスマートフォンか …
PHP開発環境(IDE)
今さらですが・・・。 PHPで開発を行う際、テキストエディタでもファイルが少ない …
IEでSSLページのダウンロードでエラーになる
随分前から発生して、知っていたのですが、忘れるのでメモ。 SSL(https)の …
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();
他にも色々やり方はあると思いますが、あまり窮屈に考えず緩く考えた場合
このぐらいが基本と言えるのではないでしょうか。