<?php
-// $Id: referer.inc.php,v 1.1 2003/07/03 04:56:04 arino Exp $
+// $Id: referer.inc.php,v 1.2 2003/07/27 13:54:58 arino Exp $
/*
* PukiWiki Referer ¥×¥é¥°¥¤¥ó(¥ê¥ó¥¯¸µÉ½¼¨¥×¥é¥°¥¤¥ó)
* (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
// ¹½À®ÄêµÁ¥Õ¥¡¥¤¥ë
define('CONFIG_REFERER','plugin/referer/config');
-function plugin_referer_action() {
- global $script,$vars,$post,$referer;
- global $_referer_msg;
-
- // µö²Ä¤·¤Æ¤¤¤Ê¤¤¤Î¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¤ÎÂбþ
- if (!$referer) {
- // ¥Ç¥Õ¥©¥ë¥È¤Ï¡¢PukiWiki ¤òɽ¼¨
- header("Location: $script");
- die();
- }
-
- // ¥Ú¡¼¥¸»ØÄê¤Ê¤·
- if (empty($vars["page"])) {
- header("Location: $script");
- die();
- }
-
- // À°Îó½ç
- $sort = $vars["sort"];
- if (is_null($sort) || empty($sort)) {
- $sort = "0d";
- }
-
- $retval['msg'] = $_referer_msg['msg_H0_Refer'];
- $retval['body'] = referer_edit($vars["page"],$sort);
- return $retval;
-}
-
-function referer_edit($page,$sort) {
-
- $r_page = rawurlencode($page);
- $file = TRACKBACK_DIR.md5($r_page).".ref";
- $data = tb_get($file);
- if ($data === false) return "";
-
- switch ($sort) {
- case "0d":
- usort($data, 'referer_sort_by_LastDate_d'); // 0d ºÇ½ª¹¹¿·Æü»þ(¿·Ãå½ç)
- break;
- case "0a":
- usort($data, 'referer_sort_by_LastDate_a'); // 0a ºÇ½ª¹¹¿·Æü»þ(ÆüÉÕ½ç)
- break;
- case "1d":
- usort($data, 'referer_sort_by_RegDate_d'); // 1d ½é²óÅÐÏ¿Æü»þ(¿·Ãå½ç)
- break;
- case "1a":
- usort($data, 'referer_sort_by_RegDate_a'); // 1a ½é²óÅÐÏ¿Æü»þ(ÆüÉÕ½ç)
- break;
- case "2d":
- usort($data, 'referer_sort_by_Counter_d'); // 2d ¥«¥¦¥ó¥¿(Â礤¤½ç)
- break;
- case "2a":
- usort($data, 'referer_sort_by_Counter_a'); // 2a ¥«¥¦¥ó¥¿(¾®¤µ¤¤½ç)
- break;
- case "3":
- usort($data, 'referer_sort_by_Referer'); // 3 Referer
- break;
- default:
- $sort = "0d";
- usort($data, 'referer_sort_by_LastDate_d'); // 0d ºÇ½ª¹¹¿·Æü»þ(¿·Ãå½ç)
- }
-
- $msg .= referer_body($data,$page,$sort);
- return $msg;
+function plugin_referer_action()
+{
+ global $vars,$referer;
+ global $_referer_msg;
+
+ // µö²Ä¤·¤Æ¤¤¤Ê¤¤¤«¡¢¥Ú¡¼¥¸¤Î»ØÄ꤬¤Ê¤¤
+ if (!$referer or empty($vars['page']))
+ {
+ return array('msg'=>'','body'=>'');
+ }
+
+ // À°Îó½ç
+ $sort = (empty($vars['sort'])) ? '0d' : $vars['sort'];
+
+ return array(
+ 'msg' => $_referer_msg['msg_H0_Refer'],
+ 'body' => referer_body($vars['page'],$sort)
+ );
}
// Referer ÌÀºÙ¹ÔÊÔ½¸
-// 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
-function referer_body($data,$page,$sort) {
- global $_referer_msg, $pconfig_color;
-
- $rc = "";
- $bg = referer_set_color();
-
- $hed0 = "<td style=\"";
- $hed1 = "\" colspan=\"2\">";
- $hed2 = "<a href=\"./?plugin=referer&page=".$page."&sort=";
-
- $hed_last = $hed0.$bg["etc"].$hed1.$hed2."0d\">".$_referer_msg['msg_Chr_darr']."</a>".$_referer_msg['msg_Hed_LastUpdate'].$hed2."0a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
- $hed_1st = $hed0.$bg["etc"].$hed1.$hed2."1d\">".$_referer_msg['msg_Chr_darr']."</a>".$_referer_msg['msg_Hed_1stDate'].$hed2."1a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
- $hed_ctr = $hed0.$bg["etc"]."text-align:right;\">".$hed2."2d\">".$_referer_msg['msg_Chr_darr']."</a>".$_referer_msg['msg_Hed_RefCounter'].$hed2."2a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
- $hed_ref = $hed0.$bg["etc"]."\">".$hed2."3\">".$_referer_msg['msg_Hed_Referer']."</a></td>\n";
-
- switch ($sort) {
- case "0d":
- $hed_last = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_darr'].$hed2."0d\">".$_referer_msg['msg_Hed_LastUpdate'].$hed2."0a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
- break;
- case "0a":
- $hed_last = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_uarr'].$hed2."0a\">".$_referer_msg['msg_Hed_LastUpdate'].$hed2."0d\">".$_referer_msg['msg_Chr_darr']."</a></td>\n";
- break;
- case "1d":
- $hed_1st = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_darr'].$hed2."1d\">".$_referer_msg['msg_Hed_1stDate'].$hed2."1a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
- break;
- case "1a":
- $hed_1st = $hed0.$bg["cur"].$hed1.$_referer_msg['msg_Chr_uarr'].$hed2."1a\">".$_referer_msg['msg_Hed_1stDate'].$hed2."1d\">".$_referer_msg['msg_Chr_darr']."</a></td>\n";
- break;
- case "2d":
- $hed_ctr = $hed0.$bg["cur"]."text-align:right;\">".$_referer_msg['msg_Chr_darr'].$hed2."2d\">".$_referer_msg['msg_Hed_RefCounter'].$hed2."2a\">".$_referer_msg['msg_Chr_uarr']."</a></td>\n";
- break;
- case "2a":
- $hed_ctr = $hed0.$bg["cur"]."text-align:right;\">".$_referer_msg['msg_Chr_uarr'].$hed2."2a\">".$_referer_msg['msg_Hed_RefCounter'].$hed2."2d\">".$_referer_msg['msg_Chr_darr']."</a></td>\n";
- break;
- case "3":
- $hed_ref = $hed0.$bg["cur"]."\">".$hed2."3\">".$_referer_msg['msg_Hed_Referer']."</a></td>\n";
- break;
- }
-
- $rc .= "<table border=\"1\" cellspacing=\"1\" summary=\"Referer\">\n<tr>\n".
- $hed_last.$hed_1st.$hed_ctr.$hed_ref."</tr>\n";
-
- foreach ($data as $x) {
- // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
- $progress0 = ereg_replace("[()]", "", get_passage($x[0])); // ºÇ½ª¹¹¿·Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
- $progress1 = ereg_replace("[()]", "", get_passage($x[1])); // ½é²óÅÐÏ¿Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
- $x[0] = date($_referer_msg['msg_Fmt_Date'], $x[0]+LOCALZONE); // ºÇ½ª¹¹¿·Æü»þʸ»úÎó
- $x[1] = date($_referer_msg['msg_Fmt_Date'], $x[1]+LOCALZONE); // ½é²óÅÐÏ¿Æü»þʸ»úÎó
- $url = htmlspecialchars(rawurldecode(rawurldecode($x[3]))); // URL
- $x[3] = htmlspecialchars(rawurldecode($x[3])); // URL
- $rc .= "<tr>\n".
- "<td>".$x[0]."</td>\n".
- "<td>".$progress0."</td>\n";
- if ($x[2] == 1) {
- $rc .= "<td colspan=\"2\">N/A</td>\n";
- } else {
- $rc .= "<td>".$x[1]."</td>\n".
- "<td>".$progress1."</td>\n";
- }
- $rc .= "<td style=\"text-align:right;\">".$x[2]."</td>\n";
-
- if (referer_ignore_check($x[3])) {
- // ŬÍÑÉԲĥǡ¼¥¿¤Î¤¿¤á¡¢¥¢¥ó¥«¡¼Ëõ»¦
- $rc .= "<td>".$url."</td>\n";
- } else {
- $rc .= "<td><a href=\"$x[3]\">".$url."</a></td>\n";
- }
- $rc .= "</tr>\n";
- }
-
- $rc .= "</table>\n";
- return $rc;
-}
-
-function referer_set_color() {
- global $pconfig_color;
-
- // config.php
- if (!count($pconfig_color)) {
- $config = new Config(CONFIG_REFERER);
- $config->read();
- $pconfig_color = $config->get('COLOR');
- unset($config);
- }
-
- // ¥Ç¥Õ¥©¥ë¥È¥«¥é¡¼
- $rc["cur"] = "background-color:#88ff88;";
- $rc["etc"] = "background-color:#cccccc;";
-
- foreach ($pconfig_color as $x) {
- // BGCOLOR(#88ff88)
- preg_match("'BGCOLOR\((.*)\)'si", $x[1], $regs);
- if (!empty($regs[1])) $x[1] = $regs[1];
- $rc[ $x[0] ] = "background-color:".$x[1].";";
- }
- return $rc;
+function referer_body($page,$sort)
+{
+ global $script,$_referer_msg;
+
+ $data = tb_get(tb_get_filename($page,'.ref'));
+ if (count($data) == 0)
+ {
+ return '<p>no data.</p>';
+ }
+ $bg = referer_set_color();
+
+ $arrow_last = $arrow_1st = $arrow_ctr = '';
+ $color_last = $color_1st = $color_ctr = $color_ref = $bg['etc'];
+ $sort_last = '0d';
+ $sort_1st = '1d';
+ $sort_ctr = '2d';
+
+ switch ($sort)
+ {
+ case '0d': // 0d ºÇ½ª¹¹¿·Æü»þ(¿·Ãå½ç)
+ usort($data,create_function('$a,$b','return $b[0] - $a[0];'));
+ $color_last = $bg['cur'];
+ $arrow_last = $_referer_msg['msg_Chr_darr'];
+ $sort_last = '0a';
+ break;
+ case '0a': // 0a ºÇ½ª¹¹¿·Æü»þ(ÆüÉÕ½ç)
+ usort($data,create_function('$a,$b','return $a[0] - $b[0];'));
+ $color_last = $bg['cur'];
+ $arrow_last = $_referer_msg['msg_Chr_uarr'];
+// $sort_last = '0d';
+ break;
+ case '1d': // 1d ½é²óÅÐÏ¿Æü»þ(¿·Ãå½ç)
+ usort($data,create_function('$a,$b','return $b[2] - $a[2];'));
+ $color_1st = $bg['cur'];
+ $arrow_1st = $_referer_msg['msg_Chr_darr'];
+ $sort_1st = '1a';
+ break;
+ case '1a': // 1a ½é²óÅÐÏ¿Æü»þ(ÆüÉÕ½ç)
+ usort($data,create_function('$a,$b','return $a[2] - $b[2];'));
+ $color_1st = $bg['cur'];
+ $arrow_1st = $_referer_msg['msg_Chr_uarr'];
+// $sort_1st = '1d';
+ break;
+ case '2d': // 2d ¥«¥¦¥ó¥¿(Â礤¤½ç)
+ usort($data,create_function('$a,$b','return $b[3] - $a[3];'));
+ $color_ctr = $bg['cur'];
+ $arrow_ctr = $_referer_msg['msg_Chr_darr'];
+ $sort_ctr = '2a';
+ break;
+ case '2a': // 2a ¥«¥¦¥ó¥¿(¾®¤µ¤¤½ç)
+ usort($data,create_function('$a,$b','return $a[3] - $b[3];'));
+ $color_ctr = $bg['cur'];
+ $arrow_ctr = $_referer_msg['msg_Chr_uarr'];
+// $sort_ctr = '2d';
+ break;
+ case '3': // 3 Referer
+ usort($data,create_function('$a,$b','return ($a[1] == $b[1]) ? 0 : (($a[1] > $b[1]) ? 1 : -1);'));
+ $color_ref = $bg['cur'];
+ break;
+ }
+
+ $body = '';
+ foreach ($data as $arr)
+ {
+ // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
+ list($ltime,$stime,$count,$url,$enable) = $arr;
+ $s_url = htmlspecialchars($url);
+
+ $lpass = get_passage($ltime,FALSE); // ºÇ½ª¹¹¿·Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
+ $spass = get_passage($stime,FALSE); // ½é²óÅÐÏ¿Æü»þ¤«¤é¤Î·Ð²á»þ´Ö
+ $ldate = get_date($_referer_msg['msg_Fmt_Date'],$ltime); // ºÇ½ª¹¹¿·Æü»þʸ»úÎó
+ $sdate = get_date($_referer_msg['msg_Fmt_Date'],$stime); // ½é²óÅÐÏ¿Æü»þʸ»úÎó
+
+ $body .= " <tr>\n <td>$ldate</td>\n <td>$lpass</td>\n";
+ $body .= ($count == 1) ? " <td colspan=\"2\">N/A</td>\n" : " <td>$sdate</td>\n <td>$spass</td>\n";
+ $body .= " <td style=\"text-align:right;\">$count</td>\n";
+
+ // ŬÍÑÉԲĥǡ¼¥¿¤Î¤È¤¤Ï¥¢¥ó¥«¡¼¤ò¤Ä¤±¤Ê¤¤
+ $body .= referer_ignore_check($url) ?
+ " <td>$s_url</td>\n" : " <td><a href=\"$s_url\">$s_url</a></td>\n";
+ $body .= " </tr>\n";
+ }
+ $href = $script.'?plugin=referer&page='.rawurlencode($page);
+ return <<<EOD
+<table border="1" cellspacing="1" summary="Referer">
+ <tr>
+ <td style="background-color:$color_last" colspan="2">
+ <a href="$href&sort=$sort_last">{$_referer_msg['msg_Hed_LastUpdate']}$arrow_last</a>
+ </td>
+ <td style="background-color:$color_1st" colspan="2">
+ <a href="$href&sort=$sort_1st">{$_referer_msg['msg_Hed_1stDate']}$arrow_1st</a>
+ </td>
+ <td style="background-color:$color_ctr;text-align:right">
+ <a href="$href&sort=$sort_ctr">{$_referer_msg['msg_Hed_RefCounter']}$arrow_ctr</a>
+ </td>
+ <td style="background-color:$color_ref">
+ <a href="$href&sort=3">{$_referer_msg['msg_Hed_Referer']}</a>
+ </td>
+ </tr>
+ $body
+</table>
+EOD;
}
-function referer_ignore_check($url) {
- global $pconfig_ignore_url;
-
- // config.php
- if (!count($pconfig_ignore_url)) {
- $config = new Config(CONFIG_REFERER);
- $config->read();
- $pconfig_ignore_url = $config->get('IGNORE');
- unset($config);
- }
-
- foreach ($pconfig_ignore_url as $x) {
- if (strpos($url,$x) === 0) return 1;
- }
- return 0;
+function referer_set_color()
+{
+ static $color;
+
+ if (!isset($color))
+ {
+ // ¥Ç¥Õ¥©¥ë¥È¥«¥é¡¼
+ $color = array(
+ 'cur' => '#88ff88',
+ 'etc' => '#cccccc'
+ );
+
+ $config = new Config(CONFIG_REFERER);
+ $config->read();
+ $pconfig_color = $config->get('COLOR');
+ unset($config);
+ foreach ($pconfig_color as $x)
+ {
+ // BGCOLOR(#88ff88)
+ $color[$x[0]] = htmlspecialchars(
+ preg_match('/BGCOLOR\(([^)]+)\)/si',$x[1],$matches) ? $matches[1] : $x[1]
+ );
+ }
+ }
+ return $color;
}
-// ¥Ç¡¼¥¿¤òÀ°Îó
-// 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer
-function referer_sort_by_LastDate_d($p1, $p2) { return ($p2['0'] - $p1['0']); }
-function referer_sort_by_LastDate_a($p1, $p2) { return ($p1['0'] - $p2['0']); }
-function referer_sort_by_RegDate_d($p1, $p2) { return ($p2['1'] - $p1['1']); }
-function referer_sort_by_RegDate_a($p1, $p2) { return ($p1['1'] - $p2['1']); }
-function referer_sort_by_Counter_d($p1, $p2) { return ($p2['2'] - $p1['2']); }
-function referer_sort_by_Counter_a($p1, $p2) { return ($p1['2'] - $p2['2']); }
-function referer_sort_by_Referer($p1, $p2) {
- if ($p1['3'] == $p2['3']) return 0;
- return ($p1['3'] > $p2['3']) ? 1 : -1;
+function referer_ignore_check($url)
+{
+ static $ignore_url;
+
+ // config.php
+ if (!isset($ignore_url))
+ {
+ $config = new Config(CONFIG_REFERER);
+ $config->read();
+ $ignore_url = $config->get('IGNORE');
+ unset($config);
+ }
+
+ foreach ($ignore_url as $x)
+ {
+ if (strpos($url,$x) === 0)
+ {
+ return 1;
+ }
+ }
+ return 0;
}
-
-?>
\ No newline at end of file
+?>
<?php
-// $Id: trackback.php,v 1.6 2003/07/14 08:09:17 arino Exp $
+// $Id: trackback.php,v 1.7 2003/07/27 13:54:58 arino Exp $
/*
* PukiWiki TrackBack ¥×¥í¥°¥é¥à
* (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
* http://localhost/pukiwiki/pukiwiki.php?FrontPage ¤ÈÌÀ³Î¤Ë»ØÄꤷ¤Ê¤¤¤È
* TrackBack ID ¤Î¼èÆÀ¤Ï¤Ç¤¤Ê¤¤
*
- * tb_count($page, $ext) TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ // pukiwiki.skin.LANG.php
- * tb_send($page,$data) TrackBack Ping Á÷¿® // file.php
- * tb_ScanLink($data) convert_html() ÊÑ´¹·ë²Ì¤Î <a> ¥¿¥°¤«¤é URL Ãê½Ð
- * tb_PageInfo($page) ¥Ú¡¼¥¸¾ðÊó¼èÆÀ
- * tb_xml_msg($rc,$msg) XML ·ë²Ì½ÐÎÏ
- * tb_save() TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
- * tb_delete($page) TrackBack Ping ¥Ç¡¼¥¿ºï½ü // edit.inc.php
- * tb_get($file) TrackBack Ping ¥Ç¡¼¥¿ÆþÎÏ
- * tb_put($file,$data) TrackBack Ping ¥Ç¡¼¥¿½ÐÎÏ
- * tb_mode_rss($file) ?__mode=rss ½èÍý
- * tb_mode_view($id) ?__mode=view ½èÍý
- * tb_body($file) TrackBack Ping ÌÀºÙ¹ÔÊÔ½¸
- * tb_sort_by_date_d($p1, $p2) ¥Ç¡¼¥¿¤òÆüÉÕ½ç¡Ê¹ß½ç¡Ë¤ÇÀ°Îó
- * tb_id2page($id) TrackBack ID ¤«¤é¥Ú¡¼¥¸Ì¾¼èÆÀ
- * tb_http($url, $method="GET", $headers="", $post=array(""))
- * GET, POST, HEAD ¤Ê¤É¤Î»ØÄê½èÍý¤ª¤è¤Ó ¥ì¥¹¥Ý¥ó¥¹¥³¡¼¥É¼èÆÀ
- * tb_PutID($page) ʸ¾ÏÃæ¤Ë trackback:ping ¤òËä¤á¹þ¤à¤¿¤á¤Î¥Ç¡¼¥¿¤òÀ¸À® // pukiwiki.php
- * tb_GetID($url) ʸ½ñ¤ò GET ¤·¡¢Ëä¤á¹þ¤Þ¤ì¤¿ TrackBack ID ¤ò¼èÆÀ
- * tb_xml_GetId($data) Ëä¤á¹þ¤Þ¤ì¤¿¥Ç¡¼¥¿¤«¤é TrackBack ID ¤ò¼èÆÀ
- * tb_startElementHandler_GetId($parser, $name, $attribs)
- * xml_set_element_handler´Ø¿ô¤Ç¥»¥Ã¥È¤·¤¿ startElementHandler
- * tb_xg_dummy($parser, $name) xml_set_element_handler´Ø¿ô¤Ç¥»¥Ã¥È¤·¤¿ EndElementHandler
+ * tb_get_id($page) TrackBack Ping ID¤ò¼èÆÀ
+ * tb_id2page($tb_id) TrackBack Ping ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
+ * tb_get_filename($page) TrackBack Ping ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ
+ * tb_count($page) TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ // pukiwiki.skin.LANG.php
+ * tb_send($page,$data) TrackBack Ping Á÷¿® // file.php
+ * tb_delete($page) TrackBack Ping ¥Ç¡¼¥¿ºï½ü // edit.inc.php
+ * tb_get($file,$key=1) TrackBack Ping ¥Ç¡¼¥¿ÆþÎÏ
+ * tb_get_rdf($page) ʸ¾ÏÃæ¤ËËä¤á¹þ¤à¤¿¤á¤Îrdf¤ò¥Ç¡¼¥¿¤òÀ¸À® // pukiwiki.php
+ * tb_get_url($url) ʸ½ñ¤òGET¤·¡¢Ëä¤á¹þ¤Þ¤ì¤¿TrackBack Ping URL¤ò¼èÆÀ
+ * class TrackBack_XML XML¤«¤éTrackBack Ping ID¤ò¼èÆÀ¤¹¤ë¥¯¥é¥¹
* == Referer Âбþʬ ==
- * ref_save($page) Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·)
- * ref_put($url,$file,$data) Referer ¥Ç¡¼¥¿½ÐÎÏ
- * get_referer($local=FALSE) Referer ÊÑ¿ô¤òÌ᤹
- *
+ * ref_save($page) Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·) // pukiwiki.php
*/
-if (!defined('TRACKBACK_DIR')) {
- define('TRACKBACK_DIR','./trackback/');
-}
-
-// TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ
-// ³ÈÄ¥»Ò .ref ¤Î¾ì¹ç¤Ï¡¢Referer ¸Ä¿ô
-function tb_count($page, $ext=".txt") {
-
- $page_enc = md5($page);
- $file = TRACKBACK_DIR.$page_enc.$ext;
-
- // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
- if (file_exists($file) === false) {
- return 0;
- }
- return count( file($file) );
+if (!defined('TRACKBACK_DIR'))
+{
+ define('TRACKBACK_DIR','./trackback/');
}
-// TrackBack Ping Á÷¿®
-function tb_send($page,$data) {
- global $script, $trackback;
-
- if (!$trackback) return;
- set_time_limit( 0 ); // ½èÍý¼Â¹Ô»þ´ÖÀ©¸Â(php.ini ¥ª¥×¥·¥ç¥ó max_execution_time )
-
- $link = tb_ScanLink($data);
- if (!is_array($link)) return; // ¥ê¥ó¥¯Ìµ¤·¤Ï½ªÎ»
- $r_page = rawurlencode($page);
-
- // ¼«Ê¸½ñ¤Î¾ðÊó
- $putdata = array();
- $putdata["title"] = $page; // ¥¿¥¤¥È¥ë¤Ï¥Ú¡¼¥¸Ì¾
- $putdata["url"] = $script."?".$r_page; // Á÷¿®»þ¤ËºÆÅÙ¡¢rawurlencode ¤µ¤ì¤ë
- $putdata["excerpt"] = tb_PageInfo($page);
- $putdata["blog_name"] = "PukiWiki/TrackBack 0.1";
- $putdata["charset"] = SOURCE_ENCODING; // Á÷¿®Â¦Ê¸»ú¥³¡¼¥É(̤´ûÄê)
-
- foreach ($link as $x) {
- // URL ¤«¤é TrackBack ID ¤ò¼èÆÀ¤¹¤ë
- $tbid = tb_GetID($x);
- if (empty($tbid)) continue; // TrackBack ¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤
- list($resp,$header,$data,$query) = tb_http($tbid,"POST","",$putdata);
- // FIXME: ¥¨¥é¡¼½èÍý¤ò¹Ô¤Ã¤Æ¤â¡¢¤¸¤ã¡¢¤É¤¦¤¹¤ë¡©¤À¤·¤Ê¤¡...
- }
-
+// TrackBack Ping ID¤ò¼èÆÀ
+function tb_get_id($page)
+{
+ return md5($page);
}
-// convert_html() ÊÑ´¹·ë²Ì¤Î <a> ¥¿¥°¤«¤é URL Ãê½Ð
-function tb_ScanLink($data) {
- $link = array();
- $string = convert_html($data);
-
- // ¥ë¡¼¥×
- while (preg_match("'(href=)(\"|\')(http:?[^\"^\'^\>]+)'si", $string, $regs)) {
- $link[] = $regs[3];
- $string = str_replace($regs[3], "", $string);
- }
- return $link;
+// TrackBack Ping ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
+function tb_id2page($tb_id)
+{
+ static $pages,$cache = array();
+
+ if (array_key_exists($tb_id,$cache))
+ {
+ return $cache[$tb_id];
+ }
+ if (!isset($pages))
+ {
+ $pages = get_existpages();
+ }
+ foreach ($pages as $page)
+ {
+ $_tb_id = tb_get_id($page);
+ $cache[$_tb_id] = $page;
+ unset($pages[$page]);
+ if ($_tb_id == $tb_id)
+ {
+ return $page;
+ }
+ }
+ return FALSE; // ¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç
}
-// ¥Ú¡¼¥¸¾ðÊó¼èÆÀ
-function tb_PageInfo($page) {
- // ÍøÍÑ¥Ú¡¼¥¸¤Î°ú¿ô¤Ê¤·
- if (empty($page)) return "";
-
- // ³µÍפÎÀ¸À®
- $excerpt = '';
- $ctr_len = 0;
- $body = get_source($page);
- foreach ($body as $x) {
- if ($x[0] == '/' && $x[1] == '/') continue; // PukiWiki ¤È¤·¤Æ¤Ï¡¢¥³¥á¥ó¥È¹Ô
- $excerpt .= trim($x);
- $ctr_len += strlen(trim($x));
- if ($ctr_len > 255) break; // 255 ¤òĶ²á¤·¤¿»þÅÀ¤Ç½ªÎ»
- }
- return $excerpt;
+// TrackBack Ping ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ
+function tb_get_filename($page,$ext='.txt')
+{
+ return TRACKBACK_DIR.tb_get_id($page).$ext;
}
-// XML ·ë²Ì½ÐÎÏ
-function tb_xml_msg($rc,$msg) {
- $x = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n".
- "<response>\n".
- "<error>".$rc."</error>\n";
- if (!empty($msg)) $x .= "<message>".$msg."</message>\n";
- $x .= "</response>\n";
- header('Content-Type: text/xml');
- print $x;
- die();
+// TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ
+function tb_count($page,$ext='.txt')
+{
+ $filename = tb_get_filename($page,$ext);
+ return file_exists($filename) ? count(file($filename)) : 0;
}
-// TrackBack Ping ¥Ç¡¼¥¿Êݸ(¹¹¿·)
-function tb_save() {
- global $script,$vars,$post;
-
- // TrackBack Ping ¤Ë¤ª¤±¤ë URL ¥Ñ¥é¥á¡¼¥¿¤Ïɬ¿Ü¤Ç¤¢¤ë¡£
- if (empty($post["url"])) {
- tb_xml_msg(1,"It is an indispensable parameter. URL is not set up.");
- }
-
- // URL ÂÅÅöÀ¥Á¥§¥Ã¥¯ (¤³¤ì¤òÆþ¤ì¤ë¤È½èÍý»þ´Ö¤ËÌäÂ꤬¤Ç¤ë)
- list($res,$hed,$dat,$query) = tb_http($post["url"],"HEAD");
- if ($res !== 200) {
- tb_xml_msg(1,"URL is fictitious.");
- }
-
- // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
- if (file_exists(TRACKBACK_DIR) === false) {
- die(TRACKBACK_DIR.": No such directory");
- }
- if (is_writable(TRACKBACK_DIR) === false) {
- die(TRACKBACK_DIR.": Permission denied");
- }
-
- // Query String ¤òÆÀ¤ë
- if (empty($vars["tb_id"])) {
- tb_xml_msg(1,"TrackBack Ping URL is inaccurate.");
- }
-
- // ¥Ú¡¼¥¸Â¸ºß¥Á¥§¥Ã¥¯
- $page = tb_id2page($vars["tb_id"]);
- if ($page == $vars["tb_id"]) {
- tb_xml_msg(1,"TrackBack ID is invalid.");
- }
-
- // TrackBack Ping ¤Î¥Ç¡¼¥¿¤òÆɤ߹þ¤à
- $rc = tb_put(TRACKBACK_DIR.$vars["tb_id"].".txt",tb_get(TRACKBACK_DIR.$vars["tb_id"].".txt"));
-
- tb_xml_msg($rc,"");
+// TrackBack Ping Á÷¿®
+function tb_send($page,$data)
+{
+ global $script,$trackback;
+
+ if (!$trackback)
+ {
+ return;
+ }
+
+ set_time_limit(0); // ½èÍý¼Â¹Ô»þ´ÖÀ©¸Â(php.ini ¥ª¥×¥·¥ç¥ó max_execution_time )
+
+ $data = convert_html($data);
+
+ // convert_html() ÊÑ´¹·ë²Ì¤Î <a> ¥¿¥°¤«¤é URL Ãê½Ð
+ preg_match_all('#href="(https?://[^"]+)"#',$data,$links,PREG_PATTERN_ORDER);
+
+ // ¼«¥Û¥¹¥È($script¤Ç»Ï¤Þ¤ëurl)¤ò½ü¤¯
+ $links = preg_grep("/^(?!".preg_quote($script,'/')."\?)./",$links[1]);
+
+ // ¥ê¥ó¥¯Ìµ¤·¤Ï½ªÎ»
+ if (!is_array($links) or count($links) == 0)
+ {
+ return;
+ }
+
+ $r_page = rawurlencode($page);
+
+ // ¼«Ê¸½ñ¤Î¾ðÊó
+ $putdata = array(
+ 'title' => $page, // ¥¿¥¤¥È¥ë¤Ï¥Ú¡¼¥¸Ì¾
+ 'url' => "$script?$r_page", // Á÷¿®»þ¤ËºÆÅÙ¡¢rawurlencode ¤µ¤ì¤ë
+ 'excerpt' => mb_strimwidth(preg_replace("/[\r\n]/",' ',strip_htmltag($data)),0,255,'...'),
+ 'blog_name' => 'PukiWiki/TrackBack 0.1',
+ 'charset' => SOURCE_ENCODING // Á÷¿®Â¦Ê¸»ú¥³¡¼¥É(̤´ûÄê)
+ );
+ foreach ($links as $link)
+ {
+ // URL ¤«¤é TrackBack ID ¤ò¼èÆÀ¤¹¤ë
+ $tb_id = tb_GetID($link);
+ if (empty($tb_id)) // TrackBack ¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤
+ {
+ continue;
+ }
+ $result = http_request($link,'POST','',$putdata);
+ // FIXME: ¥¨¥é¡¼½èÍý¤ò¹Ô¤Ã¤Æ¤â¡¢¤¸¤ã¡¢¤É¤¦¤¹¤ë¡©¤À¤·¤Ê¤¡...
+ }
}
// TrackBack Ping ¥Ç¡¼¥¿ºï½ü
-function tb_delete($page) { @unlink(TRACKBACK_DIR.md5($page).".txt"); }
-
-// TrackBack Ping ¥Ç¡¼¥¿ÆþÎÏ
-function tb_get($file) {
- if (!file_exists($file)) {
- return false;
- }
-
- $rc = array();
- $ctr = 0;
-
- $fp = @fopen ($file,"r");
- while ($data = @fgetcsv($fp, 8192, ",")) {
- $rc[$ctr++] = $data;
- }
- @fclose ($fp);
- return $rc;
-}
-
-// TrackBack Ping ¥Ç¡¼¥¿½ÐÎÏ
-function tb_put($file,$data) {
- global $script,$vars,$post;
-
- // ʸ»ú¥³¡¼¥ÉÊÑ´¹
- if (empty($post["charset"])) $post["charset"] = "auto";
- $post["title"] = mb_convert_encoding($post["title"],SOURCE_ENCODING,$post["charset"]);
- $post["excerpt"] = mb_convert_encoding($post["excerpt"],SOURCE_ENCODING,$post["charset"]);
- $post["blog_name"] = mb_convert_encoding($post["blog_name"],SOURCE_ENCODING,$post["charset"]);
-
- if (!($fp = fopen($file,"w"))) return 1;
- @flock($fp, LOCK_EX);
-
- // ¥«¥ó¥Þ¤¬Æþ¤Ã¤Æ¤âÎɤ¤¤è¤¦¤Ë¡£(¤Ê¤ó¤«°ã¤¦¤È»×¤¦¤Ê¤¡)
- $post["url"] = rawurlencode($post["url"]);
- $post["title"] = rawurlencode($post["title"]);
- $post["excerpt"] = rawurlencode($post["excerpt"]);
- $post["blog_name"] = rawurlencode($post["blog_name"]);
-
- $sw_put = 0; // ¹¹¿·ÍÑ
- if ($data !== false) {
- foreach ($data as $x) {
- if ($x[1] == $post["url"]) {
- $sw_put = 1;
- $x[0] = UTIME;
- $x[2] = $post["title"];
- $x[3] = $post["excerpt"];
- $x[4] = $post["blog_name"];
- }
- // UTIME, url, title, excerpt, blog_name
- fwrite($fp, $x[0].",".$x[1].",".$x[2].",".$x[3].",".$x[4]."\n");
- }
- }
-
- // ¹¹¿·¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢£±·ïÄɲ乤ë
- if (!$sw_put) {
- fwrite($fp, UTIME.",".$post["url"].",".$post["title"].",".$post["excerpt"].",".$post["blog_name"]."\n");
- }
-
- @flock($fp, LOCK_UN);
- @fclose($fp);
-
- return 0;
-}
-
-// ?__mode=rss ½èÍý
-function tb_mode_rss($file) {
-
- $data = tb_get($file);
- // ɽ¼¨¥Ç¡¼¥¿¤Ê¤·
- if ($data === false) {
- tb_xml_msg(1,"TrackBack Ping data does not exist.");
- }
-
- $rc = <<<EOD
-<?xml version="1.0" encoding="utf-8" ?>
-<response>
-<error>0</error>
-<rss version="0.91">
-<channel>
-
-EOD;
-
- $sw_item = 0;
- foreach ($data as $x) {
- if ($sw_item) $rc .= "<item>\n";
- $x[1] = rawurldecode($x[1]);
- $x[2] = rawurldecode($x[2]);
- $x[3] = rawurldecode($x[3]);
- // UTIME, url, title, excerpt, blog_name
- $rc .= <<<EOD
-<title>$x[2]</title>
-<link>$x[1]</link>
-<description>$x[3]</description>
-
-EOD;
- if ($sw_item) {
- $rc .= "</item>\n";
- } else {
- $rc .= "<language>ja-Jp</language>\n";
- $sw_item = 1;
- }
- }
-
- $rc .= <<<EOD
-</channel>
-</rss>
-</response>
-
-EOD;
-
- $rc = mb_convert_encoding($rc,"utf-8",SOURCE_ENCODING);
- header('Content-Type: text/xml');
- echo $rc;
-}
-
-// ?__mode=view ½èÍý
-function tb_mode_view($tbid) {
- global $script, $page_title;
- global $_tb_title, $_tb_header, $_tb_entry, $_tb_refer;
-
- // TrackBack ID ¤«¤é¥Ú¡¼¥¸Ì¾¤ò¼èÆÀ
- $page = tb_id2page($tbid);
- $r_page = rawurlencode($page);
- $file = TRACKBACK_DIR.$tbid.".txt";
-
- $tb_title = sprintf($_tb_title,$page);
- $tb_refer = sprintf($_tb_refer,"<a href=\"$script?$r_page\">'$page'</a>","<a href=\"$script\">$page_title</a>");
-
- $msg = <<<EOD
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
-<head>
- <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
-<title>$tb_title</title>
-<link rel="stylesheet" href="skin/trackback.css" type="text/css" />
-</head>
-<body>
-<div id="banner-commentspop">$_tb_header</div>
-<div class="blog">
-
-<div class="trackback-url">
-$_tb_entry<br />
-$script?plugin=tb&tb_id=$tbid <br /><br />
-$tb_refer
-</div>
-EOD;
-
- $msg .= tb_body($file);
- $msg .= <<<EOD
-</div>
-</body>
-</html>
-EOD;
-
- $msg = mb_convert_encoding($msg,"UTF-8",SOURCE_ENCODING);
- echo $msg;
- die();
-}
-
-// TrackBack Ping ÌÀºÙ¹ÔÊÔ½¸
-function tb_body($file) {
- global $_tb_header_Excerpt, $_tb_header_Weblog, $_tb_header_Tracked, $_tb_date;
-
- $data = tb_get($file);
- if ($data === false) return;
-
- // ºÇ¿·ÈǤ«¤éÀ°Îó
- usort($data, 'tb_sort_by_date_d');
-
- $rc = "";
- foreach ($data as $x) {
- // UTIME, url, title, excerpt, blog_name
- $x[0] = date($_tb_date, $x[0]+LOCALZONE); // May 2, 2003 11:25 AM
- $x[1] = rawurldecode($x[1]); // URL
- $x[2] = rawurldecode($x[2]); // title
- $x[3] = rawurldecode($x[3]); // excerpt
- $x[4] = rawurldecode($x[4]); // blog_name
- $rc .= <<<EOD
-<div class="trackback-body">
-<span class="trackback-post"><a href="$x[1]" target="new">$x[2]</a><br />
-<strong>$_tb_header_Excerpt</strong> $x[3]<br />
-<strong>$_tb_header_Weblog</strong> $x[4]<br />
-<strong>$_tb_header_Tracked</strong> $x[0]</span>
-</div>
-EOD;
- }
-
- return $rc;
-}
-
-// ¥Ç¡¼¥¿¤òÆüÉÕ½ç¡Ê¹ß½ç¡Ë¤ÇÀ°Îó
-function tb_sort_by_date_d($p1, $p2) {
- return ($p2['0'] - $p1['0']);
-}
-
-// TrackBack ID ¤«¤é¥Ú¡¼¥¸Ì¾¼èÆÀ
-function tb_id2page($id) {
- global $tb_pages;
-
- if (!is_array($tb_pages)) {
- $tb_pages = get_existpages();
- natcasesort($tb_pages);
- }
-
- foreach ($tb_pages as $x) {
- if ($id == md5(rawurlencode($x))) return rawurldecode($x);
- }
- return $id; // ¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç
-
+function tb_delete($page)
+{
+ $filename = tb_get_filename($page);
+ if (file_exists($filename))
+ {
+ @unlink($filename);
+ }
}
-/*
- * $url : http://¤«¤é»Ï¤Þ¤ëURL( http://user:pass@host:port/path?query )
- * $method : GET, POST, HEAD¤Î¤¤¤º¤ì¤«(¥Ç¥Õ¥©¥ë¥È¤ÏGET)
- * $headers : Ǥ°Õ¤ÎÄɲåإåÀ
- * $post : POST¤Î»þ¤ËÁ÷¿®¤¹¤ë¥Ç¡¼¥¿¤ò³ÊǼ¤·¤¿ÇÛÎó("ÊÑ¿ô̾"=>"ÃÍ")
- */
-function tb_http($url, $method="GET", $headers="", $post=array(""))
+// TrackBack Ping ¥Ç¡¼¥¿ÆþÎÏ
+function tb_get($file,$key=1)
{
- $rc = array();
- $url_arry = parse_url($url);
-
- // query
- if (isset($url_arry['query'])) {
- $url_arry['query'] = "?".$url_arry['query'];
- } else {
- $url_arry['query'] = "";
- }
- // fragment
- if (isset($url_arry['fragment'])) {
- $url_arry['fragment'] = "#".$url_arry['fragment'];
- } else {
- $url_arry['fragment'] = "";
- }
-
- if (!isset($url_arry['port'])) $url_arry['port'] = 80;
-
- $query = $method." ".
- $url_arry['path'].$url_arry['query'].$url_arry['fragment'].
- " HTTP/1.0\r\n";
- $query .= "Host: ".$url_arry['host']."\r\n";
- $query .= "User-Agent: PukiWiki/TrackBack 0.1\r\n";
-
- // Basic ǧ¾ÚÍÑ
- if (isset($url_arry['user']) && isset($url_arry['pass'])) {
- $query .= "Authorization: Basic ".
- base64_encode($url_arry['user'].":".$url_arry['pass'])."\r\n";
- }
-
- $query .= $headers;
-
- // POST »þ¤Ï¡¢urlencode ¤·¤¿¥Ç¡¼¥¿¤È¤¹¤ë
- if (strtoupper($method) == "POST") {
- while (list($name, $val) = each($post)) {
- $POST[] = $name."=".urlencode($val);
- }
- $data = implode("&", $POST);
- $query .= "Content-Type: application/x-www-form-urlencoded\r\n";
- $query .= "Content-Length: ".strlen($data)."\r\n";
- $query .= "\r\n";
- $query .= $data;
- } else {
- $query .= "\r\n";
- }
-
- $fp = fsockopen($url_arry['host'], $url_arry['port'], $errno, $errstr, 30);
- if (!$fp) {
- if ($errno == 0) {
- $rc[0] = 406; // Not Acceptable
- $rc[1] = ""; // Header
- $rc[2] = ""; // Data
- $rc[3] = $query; // Query String
- return $rc;
- }
- // Proxy ·Ðͳ¤Î¾ì¹ç¤Ï¡¢¼ºÇÔ¤·¡¢errno ¤Ï 0 ¤È¤Ê¤ë¡£
- // Warning: fsockopen() [http://www.php.net/function.fsockopen]:
- // php_network_getaddresses: gethostbyname failed in C:\var\www\html\pukiwiki\trackback.php on line 457
- // Warning: fsockopen() [http://www.php.net/function.fsockopen]:
- // unable to connect to xxxx.xx.xx:80 in C:\var\www\html\pukiwiki\trackback.php on line 457
- // ¤³¤ÎÁàºî¤òÀµ¤·¤¯½ªÎ»¤·¤Þ¤·¤¿¡£
- // (0)
- $rc[0] = $errno; // ¥¨¥é¡¼ÈÖ¹æ
- $rc[1] = ""; // Header
- $rc[2] = $errstr; // ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
- $rc[3] = $query; // Query String
- return $rc;
- // die("trackback.php: $errstr ($errno)\n");
- }
-
- fputs($fp, $query);
-
- $response = "";
- while (!feof($fp)) {
- $response .= fgets($fp, 4096);
- }
-
- fclose($fp);
- $resp = split("\r\n\r\n", $response, 2);
- $rccd = strtok($resp[0]," ");
- $rc[0] = strtok(" "); // Response Code
- $rc[0] = $rc[0] * 1; // ¿ô»ú·¿¤ËÊÑ´¹
- $rc[1] = $resp[0]; // Header
- $rc[2] = $resp[1]; // Data
- $rc[3] = $query; // Query String
- return $rc;
+ if (!file_exists($file))
+ {
+ return array();
+ }
+
+ $result = array();
+ $fp = @fopen($file,'r');
+ flock($fp,LOCK_EX);
+ while ($data = @fgetcsv($fp,8192,','))
+ {
+ // $data[$key] = URL
+ $result[$data[$key]] = $data;
+ }
+ flock($fp,LOCK_UN);
+ fclose ($fp);
+
+ return $result;
}
// ʸ¾ÏÃæ¤Ë trackback:ping ¤òËä¤á¹þ¤à¤¿¤á¤Î¥Ç¡¼¥¿¤òÀ¸À®
-function tb_PutId($page) {
- global $script,$trackback;
-
- if (!$trackback) return "";
-
- $r_page = rawurlencode($page);
- $page_enc = md5($r_page);
- // $dcdate = substr_replace(get_date('Y-m-d\TH:i:sO',$time),':',-2,0);
- // dc:date="$dcdate"
-
- $rc = <<<EOD
+function tb_get_rdf($page)
+{
+ global $script,$trackback;
+
+ if (!$trackback)
+ {
+ return '';
+ }
+
+ $r_page = rawurlencode($page);
+ $tb_id = tb_get_id($page);
+ // $dcdate = substr_replace(get_date('Y-m-d\TH:i:sO',$time),':',-2,0);
+ // dc:date="$dcdate"
+
+ return <<<EOD
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
-<rdf:Description
- rdf:about="$script?$r_page"
- dc:identifier="$script?$r_page"
- dc:title="$page"
- trackback:ping="$script?plugin=tb&tb_id=$page_enc" />
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
+ <rdf:Description
+ rdf:about="$script?$r_page"
+ dc:identifier="$script?$r_page"
+ dc:title="$page"
+ trackback:ping="$script?plugin=tb&tb_id=$tb_id" />
</rdf:RDF>
-->
EOD;
- return $rc;
}
-// ʸ½ñ¤ò GET ¤·¡¢Ëä¤á¹þ¤Þ¤ì¤¿ TrackBack ID ¤ò¼èÆÀ
-function tb_GetID($url) {
- global $tb_get_url, $tb_get_id;
-
- $tb_get_url = $url;
- $tb_get_id = "";
-
- // 0: Response Code, 1:Header, 2:Data, 3:Query String
- $data = tb_http($url);
- if ($data[0] !== 200) return "";
-
- // ¥ë¡¼¥×
- while (preg_match("'(<rdf:RDF .*?>)(.*?)(</rdf:RDF>)'si",$data[2],$regs)) {
- tb_xml_GetId($regs[1].$regs[2].$regs[3]);
- if (!empty($tb_get_id)) return $tb_get_id;
- $data[2] = str_replace($regs[1].$regs[2].$regs[3], "", $data[2]);
- }
- return "";
-}
-
-// Ëä¤á¹þ¤Þ¤ì¤¿¥Ç¡¼¥¿¤«¤é TrackBack ID ¤ò¼èÆÀ
-function tb_xml_GetId($data) {
- // XML ¥Ñ¡¼¥µ¤òºîÀ®¤¹¤ë
- $xml_parser = xml_parser_create();
- if (!$xml_parser) return;
-
- // start ¤ª¤è¤Ó end Í×ÁǤΥϥó¥É¥é¤òÀßÄꤹ¤ë
- xml_set_element_handler($xml_parser, "tb_startElementHandler_GetId", "tb_xg_dummy");
- xml_parse($xml_parser, $data, 0);
- xml_parser_free($xml_parser);
- return;
+// ʸ½ñ¤òGET¤·¡¢Ëä¤á¹þ¤Þ¤ì¤¿TrackBack Ping url¤ò¼èÆÀ
+function tb_get_url($url)
+{
+ // ¥×¥í¥¥·¤ò·Ðͳ¤¹¤ëɬÍפ¬¤¢¤ë¥Û¥¹¥È¤Ë¤Ïping¤òÁ÷¿®¤·¤Ê¤¤
+ $parse_url = parse_url($url);
+ if (empty($parse_url['host']) or via_proxy($parse_url['host']))
+ {
+ return '';
+ }
+
+ $data = http_request($url);
+
+ if ($data['rc'] !== 200)
+ {
+ return '';
+ }
+
+ if (!preg_match_all('#<rdf:RDF[^>]*>(.*?)</rdf:RDF>#si',$data['data'],$matches,PREG_PATTERN_ORDER))
+ {
+ return '';
+ }
+
+ $obj = new TrackBack_XML();
+ foreach ($matches[1] as $body)
+ {
+ $tb_url = $obj->parse($body,$url);
+ if ($tb_url !== FALSE)
+ {
+ return $tb_url;
+ }
+ }
+ return '';
}
-// xml_set_element_handler´Ø¿ô¤Ç¥»¥Ã¥È¤·¤¿ startElementHandler
-function tb_startElementHandler_GetId($parser, $name, $attribs) {
- global $tb_get_url, $tb_get_id;
-
- if ($name !== "RDF:DESCRIPTION") return;
-
- $tbid = $tburl = $tbabout = "";
- foreach ($attribs as $key=>$value) {
- // print "KEY=".$key." VAL=".$value."\n";
- if ($key == "RDF:ABOUT") {
- $tbabout = $value;
- continue;
- }
- if ($key == "DC:IDENTIFER" || $key == "DC:IDENTIFIER") {
- $tburl = $value;
- continue;
- }
- if ($key == "TRACKBACK:PING") {
- $tbid = $value;
- continue;
- }
- }
-
- // print "URL:".$tb_get_url."=".$tburl."\n";
- // print "TBID:".$tbid."\n";
- if ($tb_get_url == $tburl || $tb_get_url == $tbabout) $tb_get_id = $tbid;
+// Ëä¤á¹þ¤Þ¤ì¤¿¥Ç¡¼¥¿¤«¤é TrackBack Ping url¤ò¼èÆÀ¤¹¤ë¥¯¥é¥¹
+class TrackBack_XML
+{
+ var $url;
+ var $tb_url;
+
+ function parse($buf,$url)
+ {
+ // ½é´ü²½
+ $this->url = $url;
+ $this->tb_url = FALSE;
+
+ $xml_parser = xml_parser_create();
+ xml_set_element_handler($xml_parser,array(&$this,'start_element'),array(&$this,'end_element'));
+ xml_parse($xml_parser,$data,0);
+
+ if (!xml_parse($xml_parser,$buf,TRUE))
+ {
+/* die(sprintf('XML error: %s at line %d in %s',
+ xml_error_string(xml_get_error_code($xml_parser)),
+ xml_get_current_line_number($xml_parser),
+ $buf
+ ));
+*/
+ return FALSE;
+ }
+
+ return $this->tb_url;
+ }
+ function start_element($parser,$name,$attrs)
+ {
+ if ($name !== 'RDF:DESCRIPTION')
+ {
+ return;
+ }
+
+ $about = $url = $tb_url = '';
+ foreach ($attrs as $key=>$value)
+ {
+ switch ($key)
+ {
+ case 'RDF:ABOUT':
+ $about = $value;
+ break;
+ case 'DC:IDENTIFER':
+ case 'DC:IDENTIFIER':
+ $url = $value;
+ break;
+ case 'TRACKBACK:PING':
+ $tb_url = $value;
+ break;
+ }
+ }
+ if ($about == $this->url or $url == $this->url)
+ {
+ $this->tb_url = $tb_url;
+ }
+ }
+ function end_element($parser,$name)
+ {
+ // do nothing
+ }
}
-// xml_set_element_handler´Ø¿ô¤Ç¥»¥Ã¥È¤·¤¿ EndElementHandler
-function tb_xg_dummy($parser, $name) { return; }
-
// Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·)
-function ref_save($page) {
- global $referer;
-
- if (!$referer) return;
- $url = get_referer();
- if (empty($url)) return;
-
- // URI ¤ÎÂÅÅöÀɾ²Á
- $url_arry = parse_url($url);
- if (!isset($url_arry['host'])) return;
-
- // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
- if (file_exists(TRACKBACK_DIR) === false) {
- die(TRACKBACK_DIR.": No such directory");
- }
- if (is_writable(TRACKBACK_DIR) === false) {
- die(TRACKBACK_DIR.": Permission denied");
- }
-
- $filename = TRACKBACK_DIR.md5(rawurlencode($page)).".ref";
- // Referer ¤Î¥Ç¡¼¥¿¤òÆɤ߹þ¤à
- $rc = ref_put($url,$filename,tb_get($filename));
- return;
-}
-
-// Referer ¥Ç¡¼¥¿½ÐÎÏ
-function ref_put($url,$file,$data) {
-
- if (!($fp = fopen($file,"w"))) return 1;
- @flock($fp, LOCK_EX);
-
- // ¥«¥ó¥Þ¤¬Æþ¤Ã¤Æ¤âÎɤ¤¤è¤¦¤Ë¡£(¤Ê¤ó¤«°ã¤¦¤È»×¤¦¤Ê¤¡)
- $url = rawurlencode($url);
-
- $sw_put = 0; // ¹¹¿·ÍÑ
- if ($data !== false) {
- foreach ($data as $x) {
- if (!$x[4]) continue; // ÍøÍѲÄÈݥե饰¤¬ ¥¼¥í¤Î¾ì¹ç¤Ï¡¢¥Ç¡¼¥¿¤ò¼Î¤Æ¤ë
- // Referer ¥Ø¥Ã¥À¤¬°ìÃפ¹¤ë¾ì¹ç¤Ï¡¢¥Ç¡¼¥¿¤ò¹¹¿·¤¹¤ë
- if ($x[3] == $url) {
- $sw_put = 1;
- $x[0] = UTIME; // ºÇ½ª¹¹¿·Æü»þ
- $x[2]++; // »²¾È¥«¥¦¥ó¥¿
- }
- // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
- fwrite($fp, $x[0].",".$x[1].",".$x[2].",".$x[3].",".$x[4]."\n");
- }
- }
-
- // ¹¹¿·¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢£±·ïÄɲ乤ë
- if (!$sw_put) {
- // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
- fwrite($fp, UTIME.",".UTIME.",1,".$url.",1\n");
- }
-
- @flock($fp, LOCK_UN);
- @fclose($fp);
-
- return 0;
-}
-
-// Referer ÊÑ¿ô¤òÌ᤹
-function get_referer($local=FALSE)
+function ref_save($page)
{
- $HTTP_REFERER = $_SERVER['HTTP_REFERER'];
- // ¼«¥µ¥¤¥È¤â͸ú¤Î¾ì¹ç¤Ï¡¢¤½¤Î¤Þ¤ÞÌ᤹
- if ($local)
+ global $referer;
+
+ if (!$referer)
+ {
+ return;
+ }
+
+ $url = $_SERVER['HTTP_REFERER'];
+
+ // ¼«¥µ¥¤¥ÈÆâ¤Î¾ì¹ç¤Ï½èÍý¤·¤Ê¤¤
+ if ($url == '' or strpos($url,'http://'.$_SERVER['HTTP_HOST']) === 0)
+ {
+ return;
+ }
+
+ // URI ¤ÎÂÅÅöÀɾ²Á
+ $arr = parse_url($url);
+ if (!isset($arr['host']))
+ {
+ return;
+ }
+
+ // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
+ if (!is_dir(TRACKBACK_DIR))
+ {
+ die(TRACKBACK_DIR.': No such directory');
+ }
+ if (!is_writable(TRACKBACK_DIR))
+ {
+ die(TRACKBACK_DIR.': Permission denied');
+ }
+
+ // Referer ¤Î¥Ç¡¼¥¿¤ò¹¹¿·
+ if (ereg("[,\"\n\r]",$url))
+ {
+ $url = '"'.str_replace('"', '""', $url).'"';
+ }
+ $filename = tb_get_filename($page,'.ref');
+ $data = tb_get($filename,3);
+ if (!array_key_exists($url,$data))
+ {
+ // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤Ï͸ú)
+ $data[$url] = array(UTIME,UTIME,0,$url,1);
+ }
+ $data[$url][0] = UTIME;
+ $data[$url][2]++;
+
+ if (!($fp = fopen($filename,'w')))
{
- return $HTTP_REFERER;
+ return 1;
}
- $HTTP_HOST = 'http://'.$_SERVER['HTTP_HOST'];
- // ¼«¥µ¥¤¥ÈÆâ¤Î¾ì¹ç¤Ï¡¢¾Ãµî
- if (strpos($HTTP_REFERER,$HTTP_HOST) === 0)
+ flock($fp, LOCK_EX);
+ foreach ($data as $line)
{
- $HTTP_REFERER = '';
+ fwrite($fp,join(',',$line)."\n");
}
- return $HTTP_REFERER;
+ flock($fp, LOCK_UN);
+ fclose($fp);
+
+ return 0;
}
?>