PHP5にしてからタグクラウドやアクセスランキングが真っ白になってしまうという症状に悩まされていましたが、それがどうも出力制御関連*1の問題のようなのでソースコードをob_startでgrepして該当のプラグインを片っ端からはずしてみるというちょっと乱暴なやり方で原因を探ってみました。
その結果、NP_LinkCounterをはずすと症状が解決できることが分かりました。
PHP5でNP_LinkCounterを使って不具合が出ている人は検索したところいないようなので、うち固有の現象かもしれませんが、とりあえず修正にチャレンジしてみました。
† さらに探りを入れてみる
どうもPreSkinParseのコールバックが怪しいみたいなので、データが空のときはコールバックをパスするようなルーチンを埋め込んでみたところうまく動くようになりました。ただ、真因が何で、なぜこうすると問題が回避できるのかというメカニズムについてはいまひとつ理解できていません。そのため、思わぬ副作用がないかどうかについても良く分からないので使う場合には気をつけてください。
あとはとりあえず作者のyuさんに相談かなぁ。。。。
ありゃ、まじですか。修正ありがとうございます。
うちの環境ではとくに問題なかったんですが、ちょっとコード見てみます。
明示的なFALSEで回避できるのは
「output_callback が FALSE を返すと、元の入力がそのままブラウザに送信されます。」(PHPマニュアル)
とのことなので納得しました。
が・・前行のpreg_replace_callbackのあたりでバッファが空になってるってことですかね?・・謎。
タイミング的にどうなのかちょっとわからないですが、以下のようなPre/PostSkinParseの入れ子の不整合問題は関係してたりしないでしょうか。
(PHP4で問題なかったので違うかもしれないですが)
http://niku.suku.name/item/376
あ、見つけていただいてありがとうございます。
僕もPre/PostSkinParseの問題かなぁと思ったんですが、それだと全部のページで問題が出るはずですよね。今回は一部のページでだけなのでちょっと当てあまらないんですよね。
# いちおうeventを逆順にする修正はかけてみたんですが、変わりませんでした。
こちらも多分$this周りなのではないかとにらんでいるのですが。。。。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。