サーバーを新しい物に移行してはや1ヶ月強。メモリは3倍になるわCPUはPen3-Sデュアルになるわ(電気代がえらいことになったので1個は外しましたが)で性能は文句なしなのですが、1つ不満点が。
といってもハード的なものでも、Apacheなどのサーバーソフトの問題でもなく、Arvinedの小部屋 ベランダで使っているNucleusの問題です。



新しいサーバーに移行する際に手動でデータを移した関係でコメントとトラックバックが全部消えまして、まぁそれは仕方ないなと諦めていたんですが、なぜかトラックバックが送受信できなくなってしまいました。


ちなみに各種ソフトのバージョンとしては





という感じです。



症状としては



  • 送受信が出来ない


  • アクセスログを見てみると、確かにaction.phpにアクセスはしている(のでFWで弾かれていたり、という事はない)


という感じです。最初はphp5にしたせいかなー、とも思って(前のサーバーはphp4だった)プラグイン名(NP_TrackBack)と「php5」でググって見たんですが、それらしき情報は無し。
まさかMySQL側の問題でもないよなぁ…、でも万が一そうだとするとデバッグめどそうだなぁ…と思いながらApacheのエラーログを見ると、


[Wed Jun 27 10:43:24 2007] [error] [client ************] PHP Warning:  call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'ITEMACTIONS::parse_image' was given in **********\\nucleus\\libs\\PARSER.php on line 114

というエラーがどうもトラックバックを受け付けた時なんかに(ほかの時にも)でているようだ、と(やばそうな所は伏字にしました)。結果的にはこれは原因とは関係なかったんですが、こりゃソースのどこでエラーでてるか調べてみるか、という事でNP_TrackBackのソースにerror_log();を入れてみてどこでエラーがでるか調べる、というかなり原始的なデバッグ方法を取る事に。



ざっと見てみたところ、トラックバックを受け付けて処理しているのは924行目(v2.0.3jp9の場合)から始まるhandlePingという関数のようです。ではでは…とあちこちにerror_log();を入れて調べてみると、どうやら1008行目、トラックバックのデータをMySQLから引っ張ってきているところが怪しい。さらにここでは「$res = @mysql_query」とエラーが抑止されています。てことはここでエラーが起こって実行が中止→トラックバックが処理されない、ということか…と思い、試しに@を外してみると…


[Wed Jun 27 10:29:23 2007] [error] [client ************] PHP Fatal error:  Call to undefined function mysql_real_escape_string() in ***********\\nucleus\\plugins\\NP_TrackBack.php on line 1014

と、見事にエラーがログに出力されました。



さて何故Call to undefined functionになるんだ(さらに言えばなぜmysql_queryではなくmysql_real_escape_stringなのか、何故mysql_real_escape_stringの前に@が付いてないのにこのエラーはでなかったのか、ま後者はなんとなく分かるけど)…と思ってマニュアルを見返してみると、これはMySQL関数のライブラリに入ってる関数なんですね。php5になってmysqliの方がメインになりましたよー、というのを聞いていたので、こっちだけ入れて従来のMySQL関数の方はインストールしていなかった(それで問題なかったし)わけでして。



というわけで、MySQL関数のライブラリを別途入れてやると、めでたくトラックバックを送受信できるようになりました、と。ただ疑問なのは「じゃぁなんでNucleus本体とか他のプラグインでは問題なかったのか」ということでして。あとで本体のソースとかも見てみるか…。