CakePHP 2.0.2 の変更点メモ
今回のCakePHP 2.0.2 リリースは、CakePHP2.0.1 の緊急のバグフィックスリリースです。
CakeResponse::send の Content-Length ヘッダーの生成に問題があります。
詳細は、以下を参照。
CakePHP2.0.1がリリースされましたが、ちょっと待ったほうがいい
- 変更差分(2.0.1 -> 2.0.2)
主な変更点
- ■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() 時にセットするよう変更