NP_cles()

12345678910111213141516171819202122232425262728293031

NP_LinkCounterとphp5

 
投稿者:hsur 投稿日時:2008-03-23 - 22:02
カテゴリー:Nucleus Tips - - トラックバック(0)- Views: 454

PHP5にしてからタグクラウドアクセスランキングが真っ白になってしまうという症状に悩まされていましたが、それがどうも出力制御関連*1の問題のようなのでソースコードをob_startでgrepして該当のプラグインを片っ端からはずしてみるというちょっと乱暴なやり方で原因を探ってみました。

その結果、NP_LinkCounterをはずすと症状が解決できることが分かりました。
PHP5でNP_LinkCounterを使って不具合が出ている人は検索したところいないようなので、うち固有の現象かもしれませんが、とりあえず修正にチャレンジしてみました。

さらに探りを入れてみる

どうもPreSkinParseのコールバックが怪しいみたいなので、データが空のときはコールバックをパスするようなルーチンを埋め込んでみたところうまく動くようになりました。ただ、真因が何で、なぜこうすると問題が回避できるのかというメカニズムについてはいまひとつ理解できていません。そのため、思わぬ副作用がないかどうかについても良く分からないので使う場合には気をつけてください。

--- NP_LinkCounter.php.org 2006-11-21 16:27:36.000000000 +0900 +++ NP_LinkCounter.php 2008-03-22 19:11:03.119009031 +0900 @@ -206,6 +206,7 @@ class NP_LinkCounter extends NucleusPlug // convert $data = preg_replace_callback($tgt, array(&$this, 'makelink_callback'), $data); + if( ! $data ) return FALSE; return $data; }

あとはとりあえず作者のyuさんに相談かなぁ。。。。

  • *1: ob_なんちゃらというやつ

このエントリは役に立ちましたか?

  

トラックバックについて [policy]

Trackback URL:
Trackbacks
このエントリにトラックバックはありません

Comments [policy]

yu wrote:

ありゃ、まじですか。修正ありがとうございます。
うちの環境ではとくに問題なかったんですが、ちょっとコード見てみます。

2008-03-27 22:55 <%HatenaAuth()%> 

yu wrote:

明示的なFALSEで回避できるのは
「output_callback が FALSE を返すと、元の入力がそのままブラウザに送信されます。」(PHPマニュアル)
とのことなので納得しました。

が・・前行のpreg_replace_callbackのあたりでバッファが空になってるってことですかね?・・謎。
タイミング的にどうなのかちょっとわからないですが、以下のようなPre/PostSkinParseの入れ子の不整合問題は関係してたりしないでしょうか。
(PHP4で問題なかったので違うかもしれないですが)
http://niku.suku.name/item/376

2008-03-27 23:38 <%HatenaAuth()%> 

hsur wrote:

あ、見つけていただいてありがとうございます。

僕もPre/PostSkinParseの問題かなぁと思ったんですが、それだと全部のページで問題が出るはずですよね。今回は一部のページでだけなのでちょっと当てあまらないんですよね。
# いちおうeventを逆順にする修正はかけてみたんですが、変わりませんでした。

こちらも多分$this周りなのではないかとにらんでいるのですが。。。。

2008-03-29 17:30 <%HatenaAuth()%> 

Add Comments

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン