約1年ぶりのバージョンアップになります。FC2などの一部のブログサービスからのトラックバックについて文字コードの判別に失敗して文字化けを起こす問題を修正しました。
※使い方についてはplugins:trackback [Nucleus CMS Japan Wiki]を参照してください。
動作確認はNucleus 3.31SP3(UTF-8)、PHP 5.2.8環境で行っています。
動作確認報告、バグ報告はこのエントリへ、コメント・トラックバックをお願いします。
† [Fixed] Pingフォームへのリンクを開こうとするとInvalid or expired ticket.になる問題を修正
Pingフォームへのリンクにチケットがついていなかったため、エラーが出る問題に対応しました。
† [Fixed] TrackBack送信時のエラーハンドリングを改良した
TrackBack送信時に相手サーバーから返されるレスポンスが壊れていても処理が行えるようしました。
† [Fixed] TrackBackの文字コードの検出が正しく行われない場合がある問題を修正
Content-Typeに文字コードを指定してこないブログサービスからのトラックバックにおいて、
文字コードがISO-8859-1ご認識され、文字化けが発生する問題に対応しました。
以前、NP_TrackBack v2.0.3jp11でトラックバックがうまく行かないことを報告させていただいた、limeです。(その節はお世話になりました。)
現在 NP_TrackBack v2.0.3jp13を使っているのですが、どうやら、言及リンクがあるのにトラックバックを撥ねてしまうようなので、再びお知恵をお借りしたく存じます。
こちらでも少し試してみたりしたのですが
(トラックバックを受け付ける側の)アイテムの設定で
“言及リンクがなくてもTBを受付するか?”
1.ブログデフォルトに従う
2.はい
3.いいえ
1の設定だと、blockで撥ねられてしまいます。
2の設定だと、ignoreで撥ねられてしまいます。
3の設定だと、撥ねられません。(←当然のことかと思いますが)
block/ignoreについては、管理操作履歴を見ての判断で、blockされたものに関しては実際に『トラックバック管理画面』確認することができます。
以前は、『プラグインオプション設定』の中にも
言及リンクがなくてもTBを受付するか?について(はい/いいえ)の選択と
撥ねたトラックバックの処理について(ブロック/無視)の選択項目があったと思うのですが
新バージョンでそれらが無くなったことと何か関係あるのでしょうか?
(ちなみに、旧バージョン使用時は『リンクが無いと受け付けない』『撥ねたトラックバックは無視する』に設定してありました。)
設定に関して、何か私の見落としがあるようでしたら、ご指摘いただけると幸いです。
よろしくお願いします。
すいません、訂正です。
1の設定だと、blockで撥ねられてしまいます。
2の設定だと、ignoreで撥ねられてしまいます。
3の設定だと、撥ねられません。(←当然のことかと思いますが)
1の設定だと、blockで撥ねられてしまいます。
2の設定だと、撥ねられません
3の設定だと、ignoreで撥ねられてしまいます。
の誤りです。
この現象ですが「言及リンクがなくてもTBを受付するか? (blogデフォルト)」が、「いいえ(無視)」になっていているということでいいですか?
私のところで調べてみたところ、エントリごとのオプションで、「いいえ」を選ぶと強制的にblockモードになってしまうバグがあるようです。なので、実際の動作としては下記のような感じではありませんか?
1の設定だと、ignoreで撥ねられてしまいます。
2の設定だと、撥ねられません
3の設定だと、blockで撥ねられてしまいます。
どう直すかについてはこれから考えますが、とりあえず応急処置として、NP_TrackBack.phpの1423行目付近に下記のようなコードがあるので
case 'no':
return true;
そこを下記のように書き換えてみてください。
case 'no':
return 'ignore';
hsurさん、ありがとうございます。
現象は、やはりエントリの設定が
blogデフォルトに従う→ blockで撥ねられる
言及リンクがなくてもTBを受付する→ 撥ねられない
言及リンクがないとTBを受付ない→ ignoreで撥ねられる
です。
blogデフォルトがどうなっているか?については、
(現行のNP_TrackBack v2.0.3jp13では)
“言及リンクがなくてもTBを受付する/しない”
“撥ねたTBをブロックする/無視する”
の選択項目自体が無いので、どのような設定になっているのか判りません。
NP_TrackBack v2.0.3jp12を使用している時は
ブロックされたスパムをいちいち手動で削除するのが面倒なので
★ blogの設定→ 言及リンクがないとTBを受付ない/処理は“無視”
★エントリの設定→ blogの設定に従う
にしていました。(エントリ追加は常に“blogの設定に従う”です)
NP_TrackBack v2.0.3jp13にアップデートして以降だと思うのですが
気がついたら、ブロックされたスパムがいっぱい溜まっていて
「あれ?」と思って調べてみて、こうなっていることに気がつきました。
(現在は、いちいち手動でスパム削除を行ってます)
これらの現象は、(現行の)NP_TrackBack v2.0.3jp13では
『blogデフォルトが“block”固定になり、“無視”を選択できなくなった』
という解釈でよろしいのでしょうか?
だとしたら、エントリを“言及リンクがないとTBを受付ない”に設定した時に
無視されてしまうのが、謎です。
それよりも、“言及リンクがある”のに撥ねられることのほうが問題で、
これも、ブロックされたスパムの中に正しいトラックバック(言及リンクのあるトラックバック)が混じっていたことで
発覚した次第です。
NP_TrackBack v2.0.3jp12の時はちゃんと動作していたので
13にアップデートする時の私の手順が、なにか間違っていたのでしょうか?
ちなみに、アップデートは、
プラグイン管理画面で削除
↓
サーバーのファイルを上書き
↓
プラグイン管理画面で再インストール
の手順で行いました。
とりあえず、ご報告まで…
これからhsurさんにアドバイスいただいたスクリプトの書き換えをやってみて
またご報告に上がりたいと思います。
limeです、度々すいません。
hsurさんのアドバイスどおり
case 'no':
return true;
を
case 'no':
return 'ignore';
に書き換えたところ、次の様に動作が変わりました。
まずは、書き換え前の状態
【blogデフォルトに従う】 言及リンクがあるのに、Trackback: LinkCheck NG. [block]で撥ねられる。(←動作としておかしい)
【はい】 撥ねられない。(←正常動作)
【いいえ】 言及リンクがあるのに、Trackback: LinkCheck NG. [ignore]で撥ねられる。(←動作としておかしい)
return 'ignore' に書き換え後
【blogデフォルトに従う】 Trackback: LinkCheck OKで撥ねられない。(←正常動作)
【はい】 撥ねられない。(←正常動作)
【いいえ】 Trackback: LinkCheck OKで撥ねられない。(←正常動作)
ちなみに(return 'ignore'に書き換えた状態で)、言及リンクの無い記事からもTBしてみました。
結果は
【blogデフォルトに従う】 Trackback: LinkCheck NG. [block]で撥ねられる。(←正常動作?)
【はい】 撥ねられない。(←正常動作)
【いいえ】 Trackback: LinkCheck NG. [ignore]で撥ねられる。(←正常動作?)
次に、もう一度 return true に戻して、言及リンクの無い記事をTBしてみました。
結果は
【blogデフォルトに従う】 Trackback: LinkCheck NG. [block]で撥ねられる。(←正常動作?)
【はい】 撥ねられない。(←正常動作)
【いいえ】 Trackback: LinkCheck NG. [ignore]で撥ねられる。(←正常動作?)
(↑ return 'ignore'に書き換えた状態の時と、同じってこと?)
最後にもう一度、言及リンクのある記事のTBを(return true に戻した状態で)トライしてみました。
結果は
【blogデフォルトに従う】 Trackback: LinkCheck OKで撥ねられない。(←正常動作)
【はい】 撥ねられない。(←正常動作)
【いいえ】 Trackback: LinkCheck OKで撥ねられない。(←正常動作)
・・・ちゃんと、動作しました。(えっ?なんで?という感じです)
昨日、言及リンクがあるのに撥ねられた理由は全く判りません。
今日になって、サーバーに入ってコードの一部を二度書き直しただけです。
もしかしたら、昨日の検証の手順に何か間違いがあったのかもしれません…
(一応これまでの各動作検証は、二回以上やった上での結果だったのですが)
とりあえず、“撥ねられる”件に関しては解決しました。
どうもお騒がせしてすいません。
なので、現状おかしいのは
return true;と 書いても、 return 'ignore'; と書いても、
【blogデフォルト】を選ぶとblockされ、【いいえ】を選ぶとignoreされる…
ということでしょうか?
あとは、
blogの設定を“ignore”にできなくて不便しているぐらいですが、
これはバージョン: 2.0.3 jp13 がそういう仕様になっているので、仕方ないんですよね?
blockされたスパムをいちいち消すのが面倒なだけなのですが、
これは、エントリを追加する時に毎回【いいえ】を選択し直すことでしか
回避策はないのでしょうか?
週末時間がとれなかったので、まだ検証できていません。ごめんなさい。
ちなみに、トラックバックがspamと見なされていると、ブログの設定が無視になっていてもブロックされることがあるのですが、心当たりはありませんか?
言及リンクの判定については、失敗することがあることは認識しているのですが、これについてはspam対策としてある程度は厳しくてもしょうがないかなと考えています。
hsurさん、
いえいえ、お忙しいのにすいません。
特に緊急性がある現象ではないので、お時間がある時で結構です。
ちなみに、トラックバックがspamと見なされていると、ブログの設定が無視になっていてもブロックされることがあるのですが、心当たりはありませんか?
すいません、これまでの書き込みにもあるように
『blogの設定』をどこで設定すればいいのか、分からなくて困ってます…。
ver. jp12では『プラグインオプション設定』にそういう設定項目があったと思うのですが、ver. jp13では ignore/block をどこで設定すればよいのでしょうか?
ちなみに、ver. jp12の時は、ブログの『プラグインオプション設定』で“ignore”に設定していましたが、スパム判定されたTBがblockされることはありませんでした。
ver. jp12では『プラグインオプション設定』にそういう設定項目があったと思うのですが、ver. jp13では ignore/block をどこで設定すればよいのでしょうか?
jp12と同じところ(ブログオプション)にあるはずなのですが、ありませんか?
http://blog.cles.jp/media/1...
ないとすれば何かインストールに問題があるのかもしれません。。。
jp12と同じところ(ブログオプション)にあるはずなのですが、ありませんか?
http://blog.cles.jp/media/1...
ないとすれば何かインストールに問題があるのかもしれません。。。
それが、無いんです…
で、サーバー内にアップロードしてある trackback/language/japanese-euc.php を見てみたんですが
そこには
define('_TB_isAcceptWOLink', '言及リンクがなくてもTBを受付するか?');
define('_TB_isAcceptWOLinkDef', '言及リンクがなくてもTBを受付するか? (blogデフォルト)');
define('_TB_AllowTrackBack', 'このブログでTBを受付するか?');
という記述が確かにあったので、インストールに問題があったのかもしれません。
で、削除→再インストールを試みたところ、
インストール後に次のようなメッセージが出ました。
mySQL error with query ALTER TABLE `nucleus_plugin_tb` ADD INDEX `tb_id_block_timestamp_idx` ( `tb_id`, `block`, `timestamp` DESC ): Duplicate key name 'tb_id_block_timestamp_idx'
これって、データベースのテーブル構造が何かおかしいのでしょうか?
phpやmySQLについての専門的な知識が無いのでよく解らないのですが、
もしそうであれば、テーブルのどこを修正すればよいのか、ご教授いただけると幸いです。
色々とすいません…
それが、無いんです…
それはおかしいですね。。。。。
再インストール時のエラーメッセージについては特に問題ないので、気にする必要はありません。
すいません、見る場所を間違えていたようです。
blogのオプション設定、見つかりました。
で、blogの設定は“block”になっていました。
jp12 当時から基本的にここの設定は“ignore”にしたまま、弄って無いはず・・・
(↑場所を忘れてるくらいですから)
なのですが、なぜか“block”に書き変わっていました。(汗)
…で、もとい。
hsurさんの 2009-01-27 04:26付けのコメントまで戻らさせて下さい。
(それより後の私のコメントは、ややこしくなるので無視して下さい。)
私のところで調べてみたところ、エントリごとのオプションで、「いいえ」を選ぶと強制的にblockモードになってしまうバグがあるようです。
実際の現象としては逆で
エントリごとのオプションで、「いいえ」を選ぶと強制的にignoreモードになってしまうようです。
★ 実際の動作は
“ブログデフォルトに従う”だと、(blogオプションの設定に従って)で撥ねられる。
“はい”だと、撥ねられない。
“いいえ”だと、(blogオプションの設定に関わらず)ignoreで撥ねられる。
と、こうなります。
…ちなみに、この件とは関係ありませんが、
Nucleusコアを CMS v3.31SP3 にアップデートしたら
まったくTBを受け付けなくなってしまいました。(汗)
(block とか、ignore とか、全く関係ナシに受け付けない状態。pingを飛ばしたブログのping送信結果も『成功』や『失敗』ではなく、『不明』と出ます。)
再びCMS v3.31SP1 に戻せば問題無く使えていますし
複数メンバーで管理しているわけではないので、SP1のままでも問題ないのですが…
hsurさんや他の方は、SP3 でトラックバック使えてるんでしょうか????
で、blogの設定は“block”になっていました。
jp12 当時から基本的にここの設定は“ignore”にしたまま、弄って無いはず・・・
一度アンインストールをしているので、オプションがデフォルトに戻ってしまったのだと思います。
実際の現象としては逆で
エントリごとのオプションで、「いいえ」を選ぶと強制的にignoreモードになってしまうようです。
これは、私が示した改造を行った場合であれば意図した動作なのですが、そうでなければ何らかのバグの可能性があります。
hsurさんや他の方は、SP3 でトラックバック使えてるんでしょうか????
普通に使えてますよ。このエントリにトラックバックを打ってくれているひろさんも普通に使えているみたいですし。。。。
http://hiro.intlcafe.info/i...
これは、私が示した改造を行った場合であれば意図した動作なのですが、そうでなければ何らかのバグの可能性があります。
いえ、これは改造前(case 'no': return true;)での動作です。
ちなみに、改造(case 'no': return 'ignore'; に書き換え)しても、動作は改造前と変わらずです。
・・・これはコードの知識を持たない者の、あくまで素人考えなのですが、
そもそも return true; で導かれる結果は “block”ではなく“ignore”であり、
(ブログを“block”に設定している場合に)それを回避したい場合は return 'ignore'; ではなく return 'block'; に書き換える必要がある…
ってことだったりしないでしょうか?
普通に使えてますよ。このエントリにトラックバックを打ってくれているひろさんも普通に使えているみたいですし。。。。
こっちに関しては、自分のほうでも(色々試して)もう少し調べてみることにします。
(pingを飛ばすことはできるんですが、受けることができないみたいです…)
hsurさん初めまして。
NP_TrackBack v2.0.3 jp13を、Nucleus CMS v3.41RC (PHP 5.2.6 MySQL 4.0.24-standard-log (4.0.24))で利用させていただいてます。
サイトの構築途中でまだトラックバックを1件も送受信していない状態で、Nucleusの管理画面にあるDB保存/復元の「圧縮しない」オプションで現状のバックアップsqlファイルをダウンロードして、再びリストアすると、以下の部分が引っかかるらしくリストアが終了後エラー表示が出ます。
引っかかる部分
#
# TABLE: nucleus_plugin_tb_lookup
#
DROP TABLE IF EXISTS >nucleus_plugin_tb_lookup;
CREATE TABLE >nucleus_plugin_tb_lookup(
`link` text DEFAULT '' NOT NULL,
`url` text DEFAULT '' NOT NULL,
`title` text,
PRIMARY KEY (`link (100)`)
);
表示されるエラー
SQL Error: Key column 'link (100)' doesn't exist in table
このエラーは放置したままでも問題ないのでしょうか?
また、別のローカル環境でも調べてみたのですが同じ部分で同じエラーがでています。
ローカル環境は以下の通りです。
XAMPP
Nucleus CMS v3.41RC (PHP 5.2.8 MySQL 5.1.30-community (5.1.30))
生成されているSQLがおかしいですね。
さしあたって
`link (100)`
という部分を
`link` (100)
に書き換えればよいと思います。
hsurさん、ありがとうございます。
無事にアドバイスいただいたとおり書き替えましたらエラーを出さずにリストアできました。
こんばんは。
NP_TrackBackを使わせていただいてます。
トラックバックの送信
ローカル内での送受信
手動送信したものの受信
これらはきちんとできているのですが、
データの一部に全角文字を含むトラックバックの受信ができません。
xreaサーバを利用していて
PHP 4.4.8
MySQL 4.0.27
Nuclues 3.41 EUC-JP
という環境です。
http://tech.wizbangblog.com...
というサイトを利用して試してみたところ
全部半角文字のデータは正常に受信して
全角文字を含むデータでは「Input Error
Invalid input.」とエラーが表示されます。
http://japan.nucleuscms.org...
に書かれているようなことが原因なのかなと思いつつも自力で解決するほど力がなく、お力添えをお願いする次第です。
よろしくお願いします。
「Input Error Invalid input.」が出る原因としては、指摘していただいている通り、フォーラムで話題になっている問題と同じ問題だと思います。
globalfunctions.phpを改造することについてはセキュリティの機構を回避することになるのでちょっとオススメできません。特に理由がなければUTF-8版に移行していただくのが、一番無難かもしれません。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。