[PHP-users 34973] Re: output_add_rewrite_varで正しくリライトされない
harai @ netcompass.co.jp
harai @ netcompass.co.jp
2010年 1月 27日 (水) 08:49:18 JST
はらいです。
catsmoon <catsmoon @ circus.ocn.ne.jp>様:
> > # となると、Linux でも output_buffering = 4096 で問題が起こるのでしょうか?
> >
> Linux
> Apache-2.2.3
> PHP-5.2.10
> output_buffering = 2048
> 上記の環境で再現できました。
うぉ、ついに Linux でも再現…。
catsmoonさん、ありがとうございます。
また、丹羽さん、中瀬さん、検証いただきありがとうございます。
お礼が遅れてすみません。
ちょっと気になるのは、単に出力バッファリングだけの問題だとしたら、
2000回の for ループでも現象が起こりそうなものじゃないか、ということです。
<?php ... ?> の外に記述したものだけが異常な結果になっているので、
PHP モードの外の部分は、何らかの出力の最適化をしていて、
その結果おかしなことになっている、という気もしています。
そこで、
【パターンA】
<a href="0001.html">0001</a>
というリンクを、
【パターンB】
<?php echo '<a href="0001.html">0001</a>' . "\n"; ?>
と書き換える、ということをしてみました。
再現しやすくするため、output_buffering = 1024 で試しました。
◆1 全行をパターンBに書き換えた場合
→ 全行、正常動作しました。
◆2 奇数行をパターンB、偶数行をパターンAで記述した場合
→ 全行、正常動作しました。
◆3 100行ごとにパターンAとBを混ぜた場合
→ パターンA の行のみ再現しました。
◆4 (A でも B でもなく) 全行をヒアドキュメント化した場合
→ 全行、正常動作しました。
以上から、
・(◆3より)PHP モードの外にあるソースが対象
・上の条件に加え、(◆2から)ある程度まとまったサイズで再現?
・不具合が起こる位置は、output_buffering のバッファサイズに依存
このあたりは言えそうです。
PHP-users メーリングリストの案内