Tag Archives: PHP

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

PHP 5.2→5.3に上げるとき http://php.net/manual/ja/migration53.php このページの「下位互換性のない変更点 」を参考にします。 自分のコードで大きく影響したのは、ereg_ …

Read more »

mysqli_connectでエラー

mysql_connectがPHP 5.5から非推奨になるためmysqli_connectを使ってとあったので使ってみると、以下のようにエラーになることがある。 $ php -r “mysqli_connec …

Read more »

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

分かりにくかったので、メモ ■サンプル (ZendFramework 1.11.11を使用) <?php require_once ‘Zend/Loader.php’; Zend_Loader::loadClass …

Read more »

Zend_LocaleとZend_Translate

今回は、PHPアプリケーションを英語化するために、Zend_Localeと Zend_Translateを利用してみます。 (ZendFramework 1.11.11を使用) <?php // 翻訳ファイルのキャ …

Read more »

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

サーバサイドにて、ブラウザのUserAgentでAndroidがスマートフォンかタブレットかの判別をしたい場合には、Googleのウェブマスター向け公式ブログによると、”Android”の文字だけ …

Read more »

PHP開発環境(IDE)

今さらですが・・・。 PHPで開発を行う際、テキストエディタでもファイルが少ない場合はなんとかなりますが、 ファイルが多いとやはりIDEが便利です。 よく使われているのは、EclipseとNetBeansの2択かなと思い …

Read more »

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

随分前から発生して、知っていたのですが、忘れるのでメモ。 SSL(https)のページで、IE6~8で閲覧していると、 Internet Explolerでは、ドメイン名ーファイル名をダウンロードできません。 このインタ …

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 »