CakePHP2.0.1がリリースされましたが、ちょっと待ったほうがいい ->2.0.2リリースで解決


CakePHP2.0.1がリリースされましたね
リリースノート
リリースノート(日本語訳)

今回の変更で、HTTPのレスポンスヘッダにcontent-lengthをセットするようになったのですが、そこにマルチバイト関係の不具合があって日本語のコンテンツだとうまく表示できない(途中で切れる)問題があるので、2.0.1は使わずに次のリリースを待つか、最新の2.0ブランチを使うほうが良いです。

[追記]
2.0.2がリリースされ、問題箇所の修正が完了しました。
http://bakery.cakephp.org/articles/lorenzo/2011/11/03/cakephp_2_0_2_released


[追記 終了]

今回の不具合に対して、pullリクエストを2.0ブランチに投げて、何度か議論して無事に取り込まれました。自分のコードがCakeのコアに入るのは初めてなので嬉しい。
https://github.com/cakephp/cakephp/pull/283

githubは、pullリクエスト送った後でも、自分がフォークしてパッチ送ったブランチに追加コミットをpushすると、pullリクエストにコミットを自動追加してくれるみたいです。議論しながら修正コードをpushするだけで良いので、すごく便利でした。


content-lengthを返すようにした経緯は、http1.1でkeep-aliveが効いて、負荷ツールのabコマンドでうまく計測できないというものから来ているようです。(Sergeというツールを使うぶんには問題ないんだけど)
ここでcontent-lengthをmb_strlenでカウントしているためマルチバイトコンテンツだとうまくバイト数が返せない状態でした。ここをstrlen()を使うように変更し、mbstring.func_overload対応も入れたパッチを送りました。
mbstring.func_overloadがphp.iniで2とか7に設定されていると(デフォルト0)、strlen()がmb_strlen()で上書きされている状態になりますので、その場合はmb_strlenでもバイト数カウントするように制御しています。