« 海外からダイスを輸入するの巻 その9…の前に | トップページ | 海外からダイスを輸入するの巻 その9 »

2007.06.27

Nucleus+NP_TrackBackでトラックバックが送れなかった

サーバーを新しい物に移行してはや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本体とか他のプラグインでは問題なかったのか」ということでして。あとで本体のソースとかも見てみるか…。

|

« 海外からダイスを輸入するの巻 その9…の前に | トップページ | 海外からダイスを輸入するの巻 その9 »

コメント

報告ありがとうございます。

Nucleusではmysqlモジュールがなく、mysqliだけが存在する場合にはmysql_hoge()という呼び出しをmysqli_hoge()に変換するための仕組みがあります。このためコアや他のプラグインは動いたのだと思いますが、調べたところこの部分にmysql_real_escape_stringを変換するための部分がありませんでした。

コアモジュールの問題として開発チームにフィードバックしておきます。

投稿: hsur | 2007.06.27 05:10 午後

こちらこそ、対応していただいてありがとうございます。
なるほど、そういう仕組みが有ったのですね…。どうやって実現しているんだろう、と色々と興味をそそります。

投稿: CRUSADER | 2007.06.28 10:19 午後

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/13747/15573403

この記事へのトラックバック一覧です: Nucleus+NP_TrackBackでトラックバックが送れなかった:

« 海外からダイスを輸入するの巻 その9…の前に | トップページ | 海外からダイスを輸入するの巻 その9 »