ちゃだろぐ

computing

< 2009-01 >
    123
45678910
11121314151617
18192021222324
25262728293031
Powered by Nucleus CMS
mySQL error with query SELECT * FROM nucleus_plugin_counter ORDER BY count_time DESC LIMIT 1: Can't open file: 'nucleus_plugin_counter.MYI'. (errno: 145)


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /virtual/tyada/public_html/nucleus/plugins/NP_Counter.php on line 183

三重県北中部
MAX
MIN
0-6
6-12
12-18
18-24
Amazon.co.jp アソシエイト 商品無料仕入れ戦隊『電脳卸』

All

Fancy URLs環境下のトラックバックで送られるリンクURLに含まれる二重スラッシュの回避

いまさら何を、という話なんだけど。

NP_TrackBack(Ver.1.23bj7)プラグインを使用してFancy URLsモードでTrackBackを打つと、Ping先のトラックバック元へのリンクURLに二重のスラッシュが含まれてしまう場合がある。Blog URLがスラッシュで終わっていると、この現象が発生する。

この原因は、NucleusJPForumでのだいぶ前のまみおさんの指摘のように、NP_TrackBack.phpのevent_PostAddItem関数およびevent_PreUpdateItem関数で、グローバル変数$CONF['ItemURL']にBlog URLを代入してからcreateItemLink関数を呼び出しているためだ。現在ご覧のブログでは、Blog URLが 'http://www.tyada.com/computing/'と指定されているので、この文字列が$CONF['ItemURL']に渡される。

一方でcreateItemLink関数は以下の引用のように、Fancy URLsモードでは$CONF['ItemURL']の値に、単純に'/item/'と$itemidを連結して返してくれる。

function createItemLink($itemid, $extra = '') {
	global $CONF;
	if ($CONF['URLMode'] == 'pathinfo')
		$link = $CONF['ItemURL'] . '/item/' . $itemid;
	else
		$link = $CONF['ItemURL'] . '?itemid=' . $itemid;
	return addLinkParams($link, $extra);
}

かくして、'http://www.tyada.com/computing//item/266'というスラッシュを2個含んだURLがPingされてしまう。

それなら、Blog URLを 'http://www.tyada.com/computing'などとスラッシュで終わらないように指定すればいいんだけど、Blog URLを使用するのはNP_TrackBackだけじゃないからね。新しく作ったblogならともかく、既存のblogだと他にどのような影響が出るのか評価するのが大変だ。

createItemLink関数は'/item/'をつけてリンクURLを返してくれることが上記のように分かっているので、createItemLink関数を呼ぶ前に$CONF['ItemURL']の末尾にスラッシュが付いている場合にはそれを削ればよい。

event_PostAddItem関数およびevent_PreUpdateItem関数の最後の方、createItemLink関数を呼ぶ前に、以下のコードの3〜5行目を追加する。

if (!$CONF['ItemURL'])
	$CONF['ItemURL'] = $blog->getURL();
if ($CONF['URLMode'] == 'pathinfo'
	&& substr($CONF['ItemURL'], strlen($CONF['ItemURL']) - 1) == '/')
	$CONF['ItemURL'] = substr($CONF['ItemURL'], 0, strlen($CONF['ItemURL']) - 1);
$url = createItemLink($itemid);

これで他への影響を心配することなく、汎用的に修正できると思う。

2005-05-29_13:22-tyada

Related

Local search for: Fancy URLs環境下のトラックバックで送られるリンクURLに含まれる二重スラッシュの回避

TrackBack

トラックバック
このエントリにトラックバックはありません
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。 もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.

Comments

_ みやがわ

まさにビンゴな記事で参考になりました。
ソースを見てみてcreateItemLinkがおかしいのだろうと思いましたが、
直し方がわからずcreateItemLinkでググったら出てきました。
どうもありがとうございます。
2005-10-23_14:21

_ tyada

みやがわ様、ご訪問いただきありがとうございます。コメントのチェックが遅れました。
Webサイトお訪ねしました。学部の後輩の方でいらっしゃるのかな?私は精密出身(十数年前)です。
2005-11-01_23:36

Add Comments

:

:
: