<?php
-// $Id: trackback.php,v 1.4 2003/06/22 05:39:07 arino Exp $
+// $Id: trackback.php,v 1.5 2003/07/03 04:50:57 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) TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ // pukiwiki.skin.LANG.php
+ * 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_startElementHandler_GetId($parser, $name, $attribs)
* xml_set_element_handler´Ø¿ô¤Ç¥»¥Ã¥È¤·¤¿ startElementHandler
* tb_xg_dummy($parser, $name) xml_set_element_handler´Ø¿ô¤Ç¥»¥Ã¥È¤·¤¿ EndElementHandler
+ * == Referer Âбþʬ ==
+ * ref_save($page) Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·)
+ * ref_put($url,$file,$data) Referer ¥Ç¡¼¥¿½ÐÎÏ
*
*/
}
// TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ
-function tb_count($page) {
+// ³ÈÄ¥»Ò .ref ¤Î¾ì¹ç¤Ï¡¢Referer ¸Ä¿ô
+function tb_count($page, $ext=".txt") {
$page_enc = md5($page);
- $file = TRACKBACK_DIR.$page_enc.".txt";
+ $file = TRACKBACK_DIR.$page_enc.$ext;
// TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤¹þ¤ß²Äǽ¤«¤Î³Îǧ
if (file_exists($file) === false) {
// 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;
+}
?>