OSDN Git Service

Please use abstruct method $vars instead of $get or $post
[pukiwiki/pukiwiki.git] / trackback.php
index 151ba36..fd323cc 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// $Id: trackback.php,v 1.10 2003/08/06 05:51:50 arino Exp $
+// $Id: trackback.php,v 1.17 2004/07/09 23:47:48 henoheno Exp $
 /*
  * PukiWiki TrackBack ¥×¥í¥°¥é¥à
  * (C) 2003, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
  * ref_save($page)        Referer ¥Ç¡¼¥¿Êݸ(¹¹¿·) // pukiwiki.php
  */
 
-if (!defined('TRACKBACK_DIR'))
-{
-       define('TRACKBACK_DIR','./trackback/');
-}
-
 // TrackBack Ping ID¤ò¼èÆÀ
 function tb_get_id($page)
 {
@@ -62,7 +57,7 @@ function tb_id2page($tb_id)
 // TrackBack Ping ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ
 function tb_get_filename($page,$ext='.txt')
 {
-       return TRACKBACK_DIR.tb_get_id($page).$ext;
+       return TRACKBACK_DIR.encode($page).$ext;
 }
 
 // TrackBack Ping ¥Ç¡¼¥¿¸Ä¿ô¼èÆÀ
@@ -81,8 +76,9 @@ function tb_send($page,$data)
        {
                return;
        }
-       
-       set_time_limit(0); // ½èÍý¼Â¹Ô»þ´ÖÀ©¸Â(php.ini ¥ª¥×¥·¥ç¥ó max_execution_time )
+
+       // ½èÍý¼Â¹Ô»þ´ÖÀ©¸Â(php.ini ¥ª¥×¥·¥ç¥ó max_execution_time )
+       if (ini_get('safe_mode') == '0') set_time_limit(0);
        
        $data = convert_html($data);
        
@@ -99,12 +95,13 @@ function tb_send($page,$data)
        }
        
        $r_page = rawurlencode($page);
+       $excerpt = strip_htmltag(convert_html(get_source($page)));
        
        // ¼«Ê¸½ñ¤Î¾ðÊó
        $putdata = array(
                'title'     => $page, // ¥¿¥¤¥È¥ë¤Ï¥Ú¡¼¥¸Ì¾
                'url'       => "$script?$r_page", // Á÷¿®»þ¤ËºÆÅÙ¡¢rawurlencode ¤µ¤ì¤ë
-               'excerpt'   => mb_strimwidth(preg_replace("/[\r\n]/",' ',strip_htmltag($data)),0,255,'...'),
+               'excerpt'   => mb_strimwidth(preg_replace("/[\r\n]/",' ',$excerpt),0,255,'...'),
                'blog_name' => 'PukiWiki/TrackBack 0.1',
                'charset'   => SOURCE_ENCODING // Á÷¿®Â¦Ê¸»ú¥³¡¼¥É(̤´ûÄê)
        );
@@ -141,11 +138,13 @@ function tb_get($file,$key=1)
        
        $result = array();
        $fp = @fopen($file,'r');
+       set_file_buffer($fp, 0);
        flock($fp,LOCK_EX);
+       rewind($fp);
        while ($data = @fgetcsv($fp,8192,','))
        {
                // $data[$key] = URL
-               $result[$data[$key]] = $data;
+               $result[rawurldecode($data[$key])] = $data;
        }
        flock($fp,LOCK_UN);
        fclose ($fp);
@@ -177,7 +176,7 @@ function tb_get_rdf($page)
    rdf:about="$script?$r_page"
    dc:identifier="$script?$r_page"
    dc:title="$page"
-   trackback:ping="$script?plugin=tb&amp;tb_id=$tb_id" />
+   trackback:ping="$script?tb_id=$tb_id" />
 </rdf:RDF>
 -->
 EOD;
@@ -296,6 +295,7 @@ function ref_save($page)
        
        $url = $_SERVER['HTTP_REFERER'];
        
+       // URI ¤ÎÂÅÅöÀ­É¾²Á
        // ¼«¥µ¥¤¥ÈÆâ¤Î¾ì¹ç¤Ï½èÍý¤·¤Ê¤¤
        $parse_url = parse_url($url);
        if (empty($parse_url['host']) or $parse_url['host'] == $_SERVER['HTTP_HOST'])
@@ -303,13 +303,6 @@ function ref_save($page)
                return;
        }
        
-       // URI ¤ÎÂÅÅöÀ­É¾²Á
-       $arr = parse_url($url);
-       if (!isset($arr['host']))
-       {
-               return;
-       }
-       
        // TRACKBACK_DIR ¤Î¸ºß¤È½ñ¤­¹þ¤ß²Äǽ¤«¤Î³Îǧ
        if (!is_dir(TRACKBACK_DIR))
        {
@@ -326,20 +319,23 @@ function ref_save($page)
                $url = '"'.str_replace('"', '""', $url).'"';
        }
        $filename = tb_get_filename($page,'.ref');
-       $data = tb_get($filename,3);
-       if (!array_key_exists($url,$data))
+       $data = tb_get($filename, 3);
+       $d_url = rawurldecode($url);
+       if (!array_key_exists($d_url,$data))
        {
                // 0:ºÇ½ª¹¹¿·Æü»þ, 1:½é²óÅÐÏ¿Æü»þ, 2:»²¾È¥«¥¦¥ó¥¿, 3:Referer ¥Ø¥Ã¥À, 4:ÍøÍѲÄÈݥե饰(1¤ÏÍ­¸ú)
-               $data[$url] = array(UTIME,UTIME,0,$url,1);
+               $data[$d_url] = array(UTIME,UTIME,0,$url,1);
        }
-       $data[$url][0] = UTIME;
-       $data[$url][2]++;
+       $data[$d_url][0] = UTIME;
+       $data[$d_url][2]++;
        
        if (!($fp = fopen($filename,'w')))
        {
                return 1;
        }
+       set_file_buffer($fp, 0);
        flock($fp, LOCK_EX);
+       rewind($fp);
        foreach ($data as $line)
        {
                fwrite($fp,join(',',$line)."\n");