[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 メーリングリストの案内