PHP5に移行してからNP_SearchedPhraseの検索語ランキングが出力されなくなってしまったのですが、このエラーの原因についてはちゃんとerror_logに出力されていました。
PHP Fatal error: Using $this when not in object context in NP_SearchedPhrase.php on line 262
どうやら、PHP5からはクラス定義の中以外で$thisという変数を使うとFatal Errorとなるようです。NP_SearchedPhraseの中で$thisが使われているのはrankList()の部分です。プログラムを読む限りでは呼び出し時の引数と、関数定義の仮引数名を同一にしているだけのようだったので、この関数内の$thisを$tに書き換えて回避することができました。
php5にすると細かい部分でチェックが厳しくなっていたりしますね。まぁ、$thisは予約語みたいなものですし・・・・・こういうチェックを入れること自体はプログラムの健全性に貢献するので互換性の問題を抜きにすれば賛成ではあるんですが。。。。
† NP_SearchedPhrase.php.diff
ということで、サクッとパッチを書いてみました。
--- NP_SearchedPhrase.php.org 2008-03-04 10:04:09.275941947 +0900
+++ NP_SearchedPhrase.php 2008-03-04 10:08:01.940760052 +0900
@@ -248,7 +248,7 @@
}
-function rankList($this, $item, $cat, $rows, $disp_length) {
+function rankList($t, $item, $cat, $rows, $disp_length) {
if (is_numeric($item) && $item) {
$res = mysql_query('SELECT query_phrase, query_count FROM ' . sql_table('plugin_searched_phrase_count') . " WHERE item_id=$item AND cat_id=0 ORDER BY query_count DESC LIMIT 0, $rows");
} else { // We're in an index page
@@ -259,16 +259,16 @@
}
}
if (mysql_num_rows($res)) {
- $site_search_url = $this->getOption('SearchURL');
+ $site_search_url = $t->getOption('SearchURL');
- $domains = $this->getOption('SiteSearchDomains');
- $sitesearch = $this->getOption('SiteSearchSitesearch');
- $client = $this->getOption('SiteSearchClient');
- $forid = $this->getOption('SiteSearchForid');
- $ie = $this->getOption('SiteSearchIe');
- $oe = $this->getOption('SiteSearchOe');
- $hl = $this->getOption('SiteSearchHl');
- $cof = $this->getOption('SiteSearchCof');
+ $domains = $t->getOption('SiteSearchDomains');
+ $sitesearch = $t->getOption('SiteSearchSitesearch');
+ $client = $t->getOption('SiteSearchClient');
+ $forid = $t->getOption('SiteSearchForid');
+ $ie = $t->getOption('SiteSearchIe');
+ $oe = $t->getOption('SiteSearchOe');
+ $hl = $t->getOption('SiteSearchHl');
+ $cof = $t->getOption('SiteSearchCof');
$site_search_options = ($domains ? "&domains=" . urlencode($domains) : "") .
($sitesearch ? "&sitesearch=" . urlencode($sitesearch) : "") .