zz log

zaininnari Blog

CakePHP 2.0.2 の変更点メモ

今回のCakePHP 2.0.2 リリースは、CakePHP2.0.1 の緊急のバグフィックスリリースです。

CakeResponse::send の Content-Length ヘッダーの生成に問題があります。
詳細は、以下を参照。
CakePHP2.0.1がリリースされましたが、ちょっと待ったほうがいい

主な変更点

  • CakeResponse::send の Content-Length ヘッダーの生成をバイト数で返すよう修正
    • Content-Length ヘッダーにセットする値を"うっかり"「バイト数」でなく「文字数」を指定していしまい。マルチバイトの文字列が途中で切られてしまう問題
    • 修正の大筋としては、「mb_strlen」を「strlen」に変更するだけだが、「mbstring.func_overload」という設定ファイルによる既存のstrlen関数のオーバーロードに注意する必要があります。
    • 関数のオーバーロード機能を有効すると、例えば、「substr() を PHP スクリプトでコールした場合に、 mb_substr() が代わりにコールされる」ように、既存関数の振る舞いを変更することができます。
      • 今回の修正では、strlen()に対するオーバーロード機能が有効(mbstring.func_overload が2以上指定されている)かどうか事前にチェックします。
      • mb_strlen($this->_body, '8bit') の '8bit' は、strlen()に対するオーバーロード機能が有効でもバイト数をカウントする方法です。
        • PHPマニュアルのmb-strlenページによると、'8bit'の指定のほかにも、ASCII, ISO-8859-1などが指定可能だが、'8bit'よりも遅いらしい。
  • CacheHelper キャッシュファイル生成の改善
    • App::import から App::uses の使用へと改善
    • CakeResponse オブジェクトをコントローラーの生成時に渡すよう変更
  • RequestHandlerComponent::initialize() がコールされない場合、response と request がセットされなかったのを修正
    • CakeResponse と CakeRequest を __construct() 時にセットするよう変更
  • CakeResponse::_mimeTypes に 'ogg' => 'audio/ogg' をサポート
  • ExceptionRenderer::error500() 発生時のメッセージを差し替え可能に変更
    • Configure::read('debug') が 0 の場合はテンプレートメッセージ「'An Internal Error Has Occurred'」を出力する
    • Configure::read('debug') が 0 以外の場合は、コンストラクタに渡したメッセージを表示できるようにする