OSDN Git Service

Referer取得機能 upkさん提供
authorarino <arino>
Thu, 3 Jul 2003 04:50:57 +0000 (13:50 +0900)
committerarino <arino>
Thu, 3 Jul 2003 04:50:57 +0000 (13:50 +0900)
func.php
pukiwiki.ini.php
trackback.php

index 4d46076..52b6812 100644 (file)
--- a/func.php
+++ b/func.php
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: func.php,v 1.45 2003/06/23 13:24:32 arino Exp $
+// $Id: func.php,v 1.46 2003/07/03 04:47:49 arino Exp $
 //
 
 // Ê¸»úÎó¤¬InterWikiName¤«¤É¤¦¤«
@@ -773,4 +773,22 @@ function read_auth($page, $auth_flag=true, $exit_flag=true) {
        }
        return true;
 }
+
+// Referer ÊÑ¿ô¤òÌ᤹
+function get_referer($local=FALSE)
+{
+       $HTTP_REFERER = $_SERVER['HTTP_REFERER'];
+       // ¼«¥µ¥¤¥È¤âÍ­¸ú¤Î¾ì¹ç¤Ï¡¢¤½¤Î¤Þ¤ÞÌ᤹
+       if ($local)
+       {
+               return $HTTP_REFERER;
+       }
+       $HTTP_HOST = 'http://'.$_SERVER['HTTP_HOST'];
+       // ¼«¥µ¥¤¥ÈÆâ¤Î¾ì¹ç¤Ï¡¢¾Ãµî
+       if (strpos($HTTP_REFERER,$HTTP_HOST) === 0)
+       {
+               $HTTP_REFERER = '';
+       }
+       return $HTTP_REFERER;
+}
 ?>
index 574ea0e..f20a18c 100644 (file)
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: pukiwiki.ini.php,v 1.40 2003/06/22 06:37:19 arino Exp $
+// $Id: pukiwiki.ini.php,v 1.41 2003/07/03 04:49:40 arino Exp $
 //
 // PukiWiki setting file
 
@@ -59,6 +59,10 @@ $page_title = 'PukiWiki';
 $trackback = 0;
 
 /////////////////////////////////////////////////
+// Refererµ¡Ç½¤ò»ÈÍѤ¹¤ë
+$referer = 0;
+
+/////////////////////////////////////////////////
 // WikiName¤ò*̵¸ú¤Ë*¤¹¤ë
 $nowikiname = 0;
 
index 5447f48..9a36a43 100644 (file)
@@ -1,5 +1,5 @@
 <?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>
@@ -8,7 +8,7 @@
  * 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)          ¥Ú¡¼¥¸¾ðÊó¼èÆÀ
@@ -30,6 +30,9 @@
  * 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 ¥Ç¡¼¥¿½ÐÎÏ
  *
  */
 
@@ -38,10 +41,11 @@ if (!defined('TRACKBACK_DIR')) {
 }
 
 // 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) {
@@ -562,4 +566,65 @@ function tb_startElementHandler_GetId($parser, $name, $attribs) {
 // 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;
+}
 ?>