Advertisement
Guest User

Untitled

a guest
Jun 20th, 2010
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 52.09 KB | None | 0 0
  1. <?php
  2.  
  3.  /******************************************************************************************
  4.  * vBSEO Google/Yahoo Sitemap Generator for vBulletin v3.x.x by Crawlability, Inc.         *
  5.  *-----------------------------------------------------------------------------------------*
  6.  *                                                                                         *
  7.  * Copyright © 2005-2009, Crawlability, Inc. All rights reserved.                          *
  8.  * You may not redistribute this file or its derivatives without written permission.       *
  9.  *                                                                                         *
  10.  * Sales Email: [email protected]                                                     *
  11.  *                                                                                         *
  12.  *-------------------------------------LICENSE AGREEMENT-----------------------------------*
  13.  * 1. You are free to download and install this plugin on any vBulletin forum for which    *
  14.  *    you hold a valid vB license.                                                         *
  15.  * 2. You ARE NOT allowed to REMOVE or MODIFY the copyright text within the .php files     *
  16.  *    themselves.                                                                          *
  17.  * 3. You ARE NOT allowed to DISTRIBUTE the contents of any of the included files.         *
  18.  * 4. You ARE NOT allowed to COPY ANY PARTS of the code and/or use it for distribution.    *
  19.  ******************************************************************************************/
  20.  
  21.     global $vbulletin, $vbseo_vars, $vbseo_stat, $vboptions, $db, $forumcache, $bbuserinfo;
  22.  
  23.     error_reporting(E_ALL & ~E_NOTICE);
  24.     define('VBSEO_SM_VERSION', '2.5');
  25.  
  26.     if(is_object($vbulletin))
  27.     {
  28.         $vboptions = $vbulletin->options;
  29.         $forumcache = $vbulletin->forumcache;
  30.         $bbuserinfo = $vbulletin->userinfo;
  31.         if(!defined('CANVIEW'))
  32.         {
  33.             define('CANVIEW', $vbulletin->bf_ugp_forumpermissions['canview']);
  34.             define('CANVIEWOTHERS', $vbulletin->bf_ugp_forumpermissions['canviewothers']);
  35.             define('CANVIEWTHREADS', $vbulletin->bf_ugp_forumpermissions['canviewthreads']);
  36.         }
  37.         $vboptions['hideprivateforums'] = !$vboptions['showprivateforums'];
  38.     }
  39.        
  40.  
  41.     if($vbulletin->db)
  42.         $GLOBALS['db'] = &$vbulletin->db;
  43.         else
  44.         $GLOBALS['db'] = &$DB_site;
  45.  
  46.     define('VBSEO_VB_IS_30', !isset($vboptions['vbseo_sm_maxurls']));
  47.     if(VBSEO_VB_IS_30)
  48.     {
  49.         require_once(dirname(__FILE__) . '/vbseo_sm_config30x.php');
  50.         $vboptions = array_merge($vboptions?$vboptions:array(), $vbseo_sm_config30x);
  51.     }
  52.  
  53.     if($vboptions['vbseo_sm_vbseo'])
  54.     if(@include_once(DIR . '/includes/functions_vbseo.php'))
  55.     {
  56.         vbseo_startup();
  57.         if(!$GLOBALS['g_cache'])
  58.             $GLOBALS['g_cache'] = & $GLOBALS['vbseo_gcache'];
  59.     }
  60.     define('VBSEO_ON', defined('VBSEO_ENABLED') && VBSEO_ENABLED && $vboptions['vbseo_sm_vbseo']);
  61.  
  62.     $vbseo_vars['bburl']  = preg_replace('#/+$#', '', $vboptions['bburl']);
  63.     $vbseo_vars['topurl'] = preg_replace('#/+$#', '', $vboptions['vbseo_sm_toppath'] ? $vboptions['vbseo_sm_toppath'] : $vboptions['bburl']);
  64.  
  65.     define('VBSEO_SLASH_METHOD', ((strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' AND stristr($_SERVER['SERVER_SOFTWARE'], 'apache') === false) OR (strpos(SAPI_NAME, 'cgi') !== false AND @!ini_get('cgi.fix_pathinfo'))) ? '?' : '/');
  66.     if(!defined('VBSEO_SM_DLDAT'))
  67.         define('VBSEO_SM_DLDAT', VBSEO_DAT_FOLDER.'downloads.dat');
  68.  
  69. // ================================================================================
  70. // ================================================================================
  71. // ================================================================================
  72.  
  73.     function vbseo_get_last_tpl_update()
  74.     {
  75.         global $db, $vboptions, $vbseo_vars;
  76.  
  77.         $tpl_update = $db->query_first("
  78.            SELECT max( dateline ) as max
  79.            FROM `".TABLE_PREFIX."template`
  80.            WHERE styleid = '$vboptions[styleid]'
  81.         ");
  82.  
  83.         $vbseo_vars['tpl_update'] = $tpl_update['max'];
  84.     }
  85.  
  86.     function vbseo_get_forumlist($parentid = 0)
  87.     {
  88.         global $vbulletin, $vboptions, $forumcache, $_FORUMOPTIONS, $bbuserinfo;
  89.  
  90.         if($vbulletin->forumcache)
  91.             $forumcache = $vbulletin->forumcache;
  92.  
  93.  
  94.         $forumlist = array();
  95.  
  96.         $forums_scope = array_keys($forumcache);
  97.  
  98.         foreach ($forums_scope AS $forumid)
  99.         if($forumid>0)
  100.         {
  101.             $forum = $forumcache["$forumid"];
  102.             if (!($forum['options'] & ($_FORUMOPTIONS?$_FORUMOPTIONS['active']:$vbulletin->bf_misc_forumoptions['active'])))
  103.             {
  104.                 //continue;
  105.             }
  106.  
  107.             $forumperms = $bbuserinfo['forumpermissions']["$forumid"];
  108.             if ((!($forumperms & CANVIEW)
  109.                 ||!($forumperms & CANVIEWOTHERS)
  110.                 ||(defined('CANVIEWTHREADS')&&!($forumperms & CANVIEWTHREADS)))
  111.                
  112.                 AND ($vboptions['hideprivateforums']||!isset($vboptions['hideprivateforums'])) )
  113.             {
  114.                 continue;
  115.             }
  116.  
  117.             $forumlist[] = $forumid;
  118.  
  119.         }  
  120.  
  121.         return array_unique($forumlist);
  122.     }
  123.  
  124.     function vbseo_sitemap_extra()
  125.     {
  126.         global $vbseo_vars;
  127.        
  128.         if(vbseo_check_progress(2)) return;
  129.  
  130.         if(file_exists($vbseo_vars['extra_urls']) && filesize($vbseo_vars['extra_urls'])>0)
  131.         {
  132.             $pf = fopen($vbseo_vars['extra_urls'], 'r');
  133.  
  134.             if($pf)
  135.             while(!feof($pf))
  136.             {
  137.                 $nurl = trim(fgets($pf, 1024));
  138.                 if($nurl)
  139.                 {
  140.                     $url_part = explode(',', $nurl);
  141.                     vbseo_add_url($url_part[0], $url_part[2]?$url_part[2]:1.0, 0, $url_part[1]);
  142.                 }
  143.             }
  144.             fclose($pf);
  145.         }
  146.     }
  147.  
  148.     function vbseo_sitemap_forumdisplay($archived = false)
  149.     {
  150.         global $db, $vboptions, $vbseo_vars, $forumcache;
  151.        
  152.         if(vbseo_check_progress($archived?6:3)) return;
  153.  
  154.         $added_urls = 0;
  155.  
  156.         $perpage = $archived ? $vboptions['archive_threadsperpage'] : $vboptions['maxthreads'];
  157.         vbseo_log_entry("[SECTION START] forumdisplay".($archived?" archived":""), true);
  158.  
  159.         $st = $db->query_first("
  160.             SELECT
  161.                 max(threadcount) as maxre,min(threadcount) as minre,avg(threadcount) as avgre
  162.             FROM " . TABLE_PREFIX . "forum
  163.         ");
  164.         foreach($vbseo_vars['forumslist'] as $forumid)
  165.         {
  166.             if($forumcache[$forumid]['link'])continue;
  167.             $finfo = $forumcache[$forumid];
  168.             $dprune = $finfo['daysprune'];
  169.             $threadscount = $db->query_first("
  170.                 SELECT COUNT(*) AS threads
  171.                 FROM " . TABLE_PREFIX . "thread AS thread
  172.                 WHERE forumid = $forumid
  173.                     AND sticky = 0
  174.                     AND visible = 1
  175.                     ".($archived?"AND open != 10":"")."
  176.                     ".($dprune>0?"AND lastpost >= " . (time() - ($dprune * 86400)):"")."
  177.             ");
  178.             $totalthreads = $threadscount['threads'];
  179.             $totalpages = max(ceil($totalthreads / $perpage),1);
  180.            
  181.             vbseo_log_entry("[forumdisplay] forum_id: $forumid, total threads: $totalthreads, pages: $totalpages", !$archived);
  182.        
  183.             for($p=1; $p<=$totalpages; $p++)
  184.             {
  185.             $relp1 = ($totalpages+1-$p)/$totalpages;
  186.             $relp2 = vbseo_math_avg_weight($finfo['threadcount'], $st['minre'], $st['maxre'], $st['avgre']);
  187.             $relp = $relp2*0.8 + $relp1*0.2;
  188.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rf'], $relp);
  189.             $added_urls += vbseo_add_2urls(
  190.                 vbseo_url_forum($forumid, $p, $archived),
  191.                 vbseo_url_forum($forumid, $p, $archived, true),
  192.                 $prior,
  193.                 $forumcache[$forumid]['lastpost'],
  194.                 $vboptions['vbseo_sm_freq_f']
  195.             );
  196.             }
  197.         }
  198.         return $added_urls;
  199.     }
  200.  
  201.     function vbseo_sitemap_showthread($archived = false, $showpost = false)
  202.     {
  203.         global $db, $vboptions, $vbseo_vars, $vbseo_stat, $vbseo_progress;
  204.  
  205.         if(vbseo_check_progress($archived?7:4)) return;
  206.  
  207.         $added_urls = 0;
  208.         $perpage = $archived ? $vboptions['archive_postsperpage'] : $vboptions['maxposts'];
  209.         vbseo_log_entry("[SECTION START] showthread".($archived?" archived":""), true);
  210.  
  211.         $from_forum = $vbseo_progress['step2'];
  212.         $smart_p_pingbacks = $vboptions['vbseo_sm_priority_smart'] && VBSEO_ON && !VBSEO_VB_IS_30 &&
  213.             (defined('VBSEO_IN_PINGBACK')&&(VBSEO_IN_PINGBACK || VBSEO_IN_TRACKBACK));
  214.  
  215.         if($smart_p_pingbacks)
  216.         {
  217.             $lb_qnew = vbseo_dbtbl_exists('vbseo_linkback');
  218.             $lb_tblname = $lb_qnew ? 'vbseo_linkback' : 'linkback';
  219.  
  220.             $mp_query = $db->query("
  221.                 SELECT t_threadid,count(*) as cnt
  222.                 FROM " . TABLE_PREFIX . $lb_tblname."
  223.                 GROUP BY t_threadid
  224.             ");
  225.             if(!$mp_query)
  226.             $mp_query = $db->query("
  227.                 SELECT t_threadid,count(*) as cnt
  228.                 FROM " . TABLE_PREFIX . "vbseo_linkback
  229.                 GROUP BY t_threadid
  230.             ");
  231.             $mp_array = array();
  232.             $max_ping = 0;
  233.             while ($nextmp = $db->fetch_array($mp_query))
  234.             {
  235.                 $mp_array[$nextmp['t_threadid']] = $nextmp['cnt'];
  236.                 if($nextmp['cnt']>$max_ping)$max_ping=$nextmp['cnt'];
  237.             }
  238.         }
  239.  
  240.         foreach($vbseo_vars['forumslist'] as $forumid)
  241.         {
  242.             if($from_forum && $from_forum!=$forumid)
  243.                 continue;
  244.  
  245.             $from_forum = 0;
  246.             $vbseo_progress['step2'] = $forumid;
  247.  
  248.             $st = $db->query_first("
  249.                 SELECT count(*) as cnt
  250.                     ,max(views) as maxv,avg(views) as avgv
  251.                     ,max(replycount) as maxre,avg(replycount) as avgre
  252.                 FROM " . TABLE_PREFIX . "thread
  253.                 WHERE forumid = $forumid
  254.                     AND visible = 1
  255.             ");
  256.             $getthreads = $db->query("
  257.                 SELECT *
  258.                 FROM " . TABLE_PREFIX . "thread AS thread
  259.                 LEFT JOIN " . TABLE_PREFIX . "deletionlog AS deletionlog ON(deletionlog.primaryid = thread.threadid AND type = 'thread')
  260.                 WHERE forumid = $forumid
  261.                     AND visible = 1
  262.                     AND deletionlog.primaryid IS NULL
  263.                 LIMIT ".intval($vbseo_progress['step3']).",".$st['cnt']."
  264.             ");
  265.            
  266.             while ($threadrow = $db->fetch_array($getthreads))
  267.             {
  268.                 $vbseo_progress['step3']++;
  269.                 if($threadrow['open'] == 10) continue;
  270.  
  271.                 $totalposts = $threadrow['replycount'] + 1;
  272.                 $totalpages = ceil($totalposts / $perpage);
  273.                
  274.                 if($vboptions['vbseo_sm_priority_smart'])
  275.                 {
  276.                     if($threadrow['sticky'])
  277.                     {
  278.                         $prior = 1;
  279.                     }
  280.                     else
  281.                     {
  282.                     $rate = $threadrow['votenum'] ? $threadrow['votetotal']/$threadrow['votenum'] : 0;
  283.                     $relp1 = vbseo_math_avg_weight($threadrow['views'], 0, $st['maxv'], $st['avgv']);
  284.                     $relp2 = vbseo_math_avg_weight($threadrow['replycount'], 0, $st['maxre'], $st['avgre']);
  285.                     $relp3 = $rate/5;
  286.                     $relp4 = $max_ping?$mp_array[$threadrow['threadid']]/$max_ping:0;
  287.  
  288.                     $relp = $relp1*0.45 + $relp2*0.25 + $relp3*0.15 + $relp4*0.15;
  289.  
  290.                     }
  291.                 }
  292.                 $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rt'], $relp);
  293.  
  294.                 if($vboptions['vbseo_sm_freq_tsmart'])
  295.                 {
  296.                     $dpassed = (time() - $threadrow['lastpost'])/86400;
  297.                     if($dpassed<3)$freq = 'daily';
  298.                     else if($dpassed<10)$freq = 'weekly';
  299.                     else if($dpassed<100)$freq = 'monthly';
  300.                     else $freq = 'yearly';
  301.                 }else
  302.                     $freq = $vboptions['vbseo_sm_freq_t'];
  303.                          
  304.                 vbseo_log_entry("[showthread] forum_id: $forumid, thread_id: $threadrow[threadid], total posts: $totalposts, pages: $totalpages, views: $threadrow[views] $prior");
  305.  
  306.                 for($p=1; $p<=$totalpages; $p++)
  307.                 {
  308.                 $vbseo_stat[$archived?'at':'t'] += vbseo_add_2urls(
  309.                     vbseo_url_thread($threadrow, $p, $archived),
  310.                     vbseo_url_thread($threadrow, $p, $archived, true),
  311.                     $prior,
  312.                     $threadrow['lastpost'],
  313.                     $freq
  314.                 );
  315.                
  316.                 }
  317.  
  318.                 if($showpost)
  319.                 {
  320.  
  321.                 $getposts = $db->query("
  322.                     SELECT p.dateline,p.postid,p.threadid
  323.                     FROM " . TABLE_PREFIX . "post AS p
  324.                     WHERE p.threadid = $threadrow[threadid]
  325.                         AND visible = 1
  326.                     ORDER BY p.dateline
  327.                 ");
  328.                
  329.                 $pcount = 0;
  330.                 while ($postrow = $db->fetch_array($getposts))
  331.                 {
  332.                     $pcount++;
  333.                     vbseo_log_entry("[showpost] forum_id: $forumid, thread_id: $postrow[threadid], post_id: $postrow[postid]");
  334.                     $relp = $relp*0.8+$pcount/($threadrow['replycount']+1)*0.2;
  335.                     $prior2 = vbseo_sm_priority($vboptions['vbseo_sm_priority_rp'], $relp);
  336.                     $vbseo_stat['p'] += vbseo_add_2urls(
  337.                         vbseo_url_post($threadrow, $postrow, $pcount),
  338.                         vbseo_url_post($threadrow, $postrow, $pcount, true),
  339.                         $prior2,
  340.                         $postrow['dateline'],
  341.                         $vboptions['vbseo_sm_freq_p']
  342.                     );
  343.                 }
  344.                 $db->free_result($getposts);
  345.                 }
  346.             }
  347.             $db->free_result($getthreads);
  348.             $vbseo_progress['step3'] = 0;
  349.         }
  350.     }
  351.  
  352.     function vbseo_sitemap_polls()
  353.     {
  354.         global $db, $vboptions, $vbseo_vars;
  355.  
  356.         if(vbseo_check_progress(9)) return;
  357.         $added_urls = 0;
  358.         vbseo_log_entry("[SECTION START] polls", true);
  359.  
  360.         $st = $db->query_first("
  361.             SELECT
  362.                 max(voters) as maxre,min(voters) as minre,avg(voters) as avgre
  363.             FROM " . TABLE_PREFIX . "poll
  364.         ");
  365.         foreach($vbseo_vars['forumslist'] as $forumid)
  366.         {
  367.             $getthreads = $db->query("
  368.                 SELECT *
  369.                 FROM " . TABLE_PREFIX . "thread AS thread
  370.                 WHERE forumid = $forumid
  371.                     AND visible = 1
  372.                     AND pollid > 0
  373.             ");
  374.  
  375.             while ($threadrow = $db->fetch_array($getthreads))
  376.             {
  377.                 $getpoll = $db->query_first("
  378.                     SELECT *
  379.                     FROM " . TABLE_PREFIX . "poll
  380.                     WHERE pollid = ".$threadrow['pollid']."
  381.                 ");
  382.                 if(!$getpoll)
  383.                     continue;
  384.  
  385.                 vbseo_log_entry("[poll] forum_id: $forumid, thread_id: $threadrow[threadid], pollid: $threadrow[pollid]");
  386.  
  387.                 $added_urls++;
  388.  
  389.                 $relp2 = vbseo_math_avg_weight($getpoll['voters'], $st['minre'], $st['maxre'], $st['avgre']);
  390.                 $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rpoll'], $relp2);
  391.                 $added_urls += vbseo_add_2urls(
  392.                     vbseo_url_poll($threadrow, $getpoll),
  393.                     vbseo_url_poll($threadrow, $getpoll, true),
  394.                     $prior,
  395.                     $getpoll['dateline'],
  396.                     $vboptions['vbseo_sm_freq_poll']
  397.                 );
  398.                
  399.             }
  400.             $db->free_result($getthreads);
  401.         }
  402.         return $added_urls;
  403.     }
  404.  
  405.     function vbseo_sitemap_blogs()
  406.     {
  407.         global $db, $vboptions, $vbseo_vars;
  408.  
  409.         if(vbseo_check_progress(10)) return;
  410.         vbseo_log_entry("[SECTION START] blogs", true);
  411.         vbseo_add_url(VBSEO_ON ? vbseo_any_url($vbseo_vars['bburl'].'/blog.'.VBSEO_PHP_EXT) : $vbseo_vars['bburl'].'/blog.'.VBSEO_PHP_EXT, 1.0);
  412.         $added_urls = 0;
  413.  
  414.         if(!vbseo_dbtbl_exists('blog'))
  415.             return 0;
  416.  
  417.         $st = $db->query_first("
  418.             SELECT
  419.                 max(views) as maxre,min(views) as minre,avg(views) as avgre
  420.             FROM " . TABLE_PREFIX . "blog
  421.             WHERE state='visible'
  422.         ");
  423.         $getblogs = $db->query("
  424.             SELECT *
  425.             FROM " . TABLE_PREFIX . "blog
  426.             WHERE state = 'visible'
  427.         ");
  428.         while ($blogrow = $db->fetch_array($getblogs))
  429.         {
  430.             vbseo_log_entry("[blog] blog_id: $blogrow[blogid]");
  431.  
  432.             $relp2 = vbseo_math_avg_weight($blogrow['views'], $st['minre'], $st['maxre'], $st['avgre']);
  433.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rb'], $relp2);
  434.             $added_urls += vbseo_add_2urls(
  435.                 vbseo_url_blog_entry($blogrow),
  436.                 vbseo_url_blog_entry($blogrow, true),
  437.                 $prior,
  438.                 $blogrow['dateline'],
  439.                 $vboptions['vbseo_sm_freq_b']
  440.             );
  441.            
  442.         }
  443.         $db->free_result($getblogs);
  444.         return $added_urls;
  445.     }
  446.  
  447.     function vbseo_sitemap_blog_tags()
  448.     {
  449.         global $db, $vboptions, $vbseo_vars;
  450.  
  451.         if(vbseo_check_progress(14)) return;
  452.         vbseo_log_entry("[SECTION START] blog tags", true);
  453.  
  454.         if(!vbseo_dbtbl_exists('blog_tag'))
  455.             return 0;
  456.  
  457.         $added_urls = 0;
  458.  
  459.         $added_urls += vbseo_add_2urls(
  460.             vbseo_url_blogtag(array(), false, VBSEO_URL_BLOG_TAGS_HOME),
  461.             vbseo_url_blogtag(array(), true),
  462.             vbseo_sm_priority($vboptions['vbseo_sm_priority_rblogtag'],1),
  463.             0,
  464.             $vboptions['vbseo_sm_freq_blogtag']
  465.         );
  466.  
  467.         $st = $db->query_first("
  468.             SELECT
  469.                 count(*) as maxre
  470.             FROM " . TABLE_PREFIX . "blog_tagentry
  471.             GROUP BY tagid
  472.             ORDER BY maxre DESC
  473.             LIMIT 0,1
  474.         ");
  475.  
  476.         $getrecords = $db->query("
  477.             SELECT tagid, tagtext as tag
  478.             FROM " . TABLE_PREFIX . "blog_tag
  479.         ");
  480.         $ouserid = 0;
  481.         while ($rrow = $db->fetch_array($getrecords))
  482.         {
  483.             vbseo_log_entry("[tag] tag_id: $rrow[tagid]");
  484.             $tcount = $db->query_first("
  485.                 SELECT COUNT(*) as cnt,max(lastcomment) as lastupdate
  486.                 FROM " . TABLE_PREFIX . "blog AS blog
  487.                 INNER JOIN " . TABLE_PREFIX . "blog_tagentry AS tagentry ON
  488.                     (tagentry.tagid = $rrow[tagid] AND tagentry.blogid = blog.blogid)
  489.                 WHERE
  490.                     blog.state = 'visible'
  491.                 GROUP BY tagentry.tagid
  492.             ");
  493.             if(!$tcount['cnt'])
  494.                 continue;
  495.             $pcount = ceil($tcount['cnt']/$vboptions['vbblog_perpage']);
  496.             $relp2 = vbseo_math_avg_weight($tcount['cnt'], 0, $st['maxre'], $st['maxre']/2);
  497.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rblogtag'], $relp2);
  498.             for($i=0;$i<$pcount;$i++)
  499.             {
  500.             if($i) $rrow['page'] = $i+1;
  501.             $added_urls += vbseo_add_2urls(
  502.                 vbseo_url_blogtag($rrow, false, $i ? VBSEO_URL_BLOG_TAGS_ENTRY_PAGE : VBSEO_URL_BLOG_TAGS_ENTRY),
  503.                 vbseo_url_blogtag($rrow, true),
  504.                 $prior,
  505.                 $rrow['lastupdate'],
  506.                 $vboptions['vbseo_sm_freq_blogtag']
  507.             );
  508.             }
  509.  
  510.         }
  511.         $db->free_result($getrecords);
  512.  
  513.         return $added_urls;
  514.     }
  515.  
  516.     function vbseo_sitemap_member()
  517.     {
  518.         global $db, $vboptions;
  519.  
  520.         if(vbseo_check_progress(8)) return;
  521.         vbseo_log_entry("[SECTION START] member", true);
  522.  
  523.         $added_urls = 0;
  524.         $st = $db->query_first("
  525.             SELECT
  526.                 count(*) as cnt,
  527.                 max(posts) as maxre,min(posts) as minre,avg(posts) as avgre
  528.             FROM " . TABLE_PREFIX . "user
  529.         ");
  530.         $getmembers = $db->query("
  531.             SELECT userid, username, lastpost,posts
  532.             FROM " . TABLE_PREFIX . "user
  533.             ORDER BY username
  534.             LIMIT ".intval($vbseo_progress['step2']).",".$st['cnt']."
  535.         ");
  536.        
  537.         while ($member = $db->fetch_array($getmembers))
  538.         {
  539.             vbseo_log_entry("[member] user_id: $member[userid]");
  540.             $vbseo_progress['step2']++;
  541.        
  542.             $relp2 = vbseo_math_avg_weight($member['posts'], $st['minre'], $st['maxre'], $st['avgre']);
  543.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rm'], $relp2);
  544.             $added_urls += vbseo_add_2urls(
  545.                 vbseo_url_member($member['userid'], $member['username']),
  546.                 vbseo_url_member($member['userid'], $member['username'], true),
  547.                 $prior,
  548.                 $member['lastpost'],
  549.                 $vboptions['vbseo_sm_freq_m']
  550.             );
  551.         }
  552.         $db->free_result($getmembers);
  553.         return $added_urls;
  554.     }
  555.  
  556.     function vbseo_sitemap_albums()
  557.     {
  558.         global $db, $vboptions, $vbseo_vars;
  559.  
  560.         if(vbseo_check_progress(11)) return;
  561.         vbseo_log_entry("[SECTION START] albums", true);
  562.  
  563.         if(!vbseo_dbtbl_exists('album') )
  564.             return 0;
  565.  
  566.         $added_urls = 0;
  567.  
  568.         $st = $db->query_first("
  569.             SELECT
  570.                 count(*) as cnt,
  571.                 max(posts) as maxre,min(posts) as minre,avg(posts) as avgre
  572.             FROM " . TABLE_PREFIX . "user
  573.         ");
  574.         $getrecords = $db->query("
  575.             SELECT a.*,u.username,u.posts
  576.             FROM " . TABLE_PREFIX . "album a
  577.             LEFT JOIN " . TABLE_PREFIX . "user u on u.userid=a.userid
  578.             WHERE visible = 2
  579.             ORDER BY userid
  580.         ");
  581.         $ouserid = 0;
  582.         while ($rrow = $db->fetch_array($getrecords))
  583.         {
  584.             vbseo_log_entry("[album] album_id: $rrow[albumid]");
  585.  
  586.             $relp2 = vbseo_math_avg_weight($rrow['posts'], $st['minre'], $st['maxre'], $st['avgre']);
  587.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_ra'], $relp2);
  588.  
  589.             if($ouserid!=$rrow['userid'])
  590.             {
  591.             $rrow2 = $rrow;
  592.             unset($rrow2['albumid']);
  593.             $added_urls += vbseo_add_2urls(
  594.                 vbseo_url_album($rrow2, false, 'VBSEO_URL_MEMBER_ALBUMS'),
  595.                 vbseo_url_album($rrow2, true),
  596.                 $prior,
  597.                 $rrow['lastpicturedate'],
  598.                 $vboptions['vbseo_sm_freq_a']
  599.             );
  600.             $ouserid = $rrow['userid'];
  601.             }
  602.  
  603.             $added_urls += vbseo_add_2urls(
  604.                 vbseo_url_album($rrow, false, 'VBSEO_URL_MEMBER_ALBUM'),
  605.                 vbseo_url_album($rrow, true),
  606.                 $prior*0.8,
  607.                 $rrow['lastpicturedate'],
  608.                 $vboptions['vbseo_sm_freq_a']
  609.             );
  610.            
  611.             $getitems = $db->query("
  612.                 SELECT ap.*,p.caption
  613.                 FROM " . TABLE_PREFIX . "albumpicture ap
  614.                 LEFT JOIN " . TABLE_PREFIX . "picture p on p.pictureid=ap.pictureid
  615.                 WHERE state = 'visible' AND albumid = '".$rrow['albumid'] ."'
  616.             ");
  617.             while ($ritem = $db->fetch_array($getitems))
  618.             {
  619.                 vbseo_log_entry("[picture] picture_id: $ritem[pictureid]");
  620.                 $ritem = array_merge($rrow, $ritem);
  621.  
  622.                 $added_urls += vbseo_add_2urls(
  623.                     vbseo_url_album($ritem, false, 'VBSEO_URL_MEMBER_PICTURE'),
  624.                     vbseo_url_album($ritem, true),
  625.                     $prior,
  626.                     $ritem['dateline'],
  627.                     $vboptions['vbseo_sm_freq_a']
  628.                 );
  629.                
  630.             }
  631.             $db->free_result($getitems);
  632.         }
  633.         $db->free_result($getrecords);
  634.  
  635.         return $added_urls;
  636.     }
  637.  
  638.     function vbseo_sitemap_groups()
  639.     {
  640.         global $db, $vboptions, $vbseo_vars;
  641.  
  642.         if(vbseo_check_progress(12)) return;
  643.         vbseo_log_entry("[SECTION START] groups", true);
  644.  
  645.         if(!vbseo_dbtbl_exists('socialgroup'))
  646.             return 0;
  647.  
  648.         $added_urls = 0;
  649.  
  650.         $added_urls += vbseo_add_2urls(
  651.             vbseo_url_group(array(), false, VBSEO_URL_GROUPS_HOME),
  652.             vbseo_url_group(array(), true),
  653.             vbseo_sm_priority($vboptions['vbseo_sm_priority_rg'],1),
  654.             0,
  655.             $vboptions['vbseo_sm_freq_g']
  656.         );
  657.  
  658.         $st = $db->query_first("
  659.             SELECT
  660.                 max(members) as maxre,min(members) as minre,avg(members) as avgre
  661.             FROM " . TABLE_PREFIX . "socialgroup
  662.         ");
  663.  
  664.         $getrecords = $db->query("
  665.             SELECT g.*
  666.             FROM " . TABLE_PREFIX . "socialgroup g
  667.             WHERE type = 'public'
  668.         ");
  669.  
  670.         $hasdiscussions = vbseo_dbtbl_exists('discussion');
  671.  
  672.         if($hasdiscussions)
  673.         $stdis = $db->query_first("
  674.             SELECT
  675.                 max(visible) as maxre,min(visible) as minre,avg(visible) as avgre
  676.             FROM " . TABLE_PREFIX . "discussion
  677.             WHERE deleted=0 AND groupid>0
  678.         ");
  679.  
  680.         $ouserid = 0;
  681.         while ($rrow = $db->fetch_array($getrecords))
  682.         {
  683.             vbseo_log_entry("[album] group_id: $rrow[groupid]");
  684.             $tcount = $db->query_first("
  685.                 SELECT count(*)as cnt,max(dateline) as lastupdate
  686.                 FROM " . TABLE_PREFIX . "groupmessage AS groupmessage
  687.                 ".($hasdiscussions?"LEFT JOIN " . TABLE_PREFIX . "discussion AS discussion ON (groupmessage.discussionid = discussion.discussionid)":"")."
  688.                 WHERE ".
  689.                 ($hasdiscussions ? "discussion.deleted = 0 AND discussion.":"").
  690.                     "groupid='$rrow[groupid]'
  691.             ");
  692.             $pcount = max(1, ceil($tcount['cnt']/$vboptions['vm_perpage']));
  693.             $rrow2 = $rrow;
  694.            
  695.             $relp2 = vbseo_math_avg_weight($rrow['members'], $st['minre'], $st['maxre'], $st['avgre']);
  696.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rg'], $relp2);
  697.  
  698.             if($vboptions['vbseo_sm_group'])
  699.             for($i=0;$i<$pcount;$i++)
  700.             {
  701.             if($i) $rrow2['page'] = $i+1;
  702.             $added_urls += vbseo_add_2urls(
  703.                 vbseo_url_group($rrow2, false, $i ? VBSEO_URL_GROUPS_PAGE : VBSEO_URL_GROUPS),
  704.                 vbseo_url_group($rrow2, true),
  705.                 $prior,
  706.                 $rrow['lastupdate'],
  707.                 $vboptions['vbseo_sm_freq_g']
  708.             );
  709.             }
  710.  
  711.             if($vboptions['vbseo_sm_group_img'])
  712.             {
  713.             // ------------------------
  714.                
  715.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rgi'], 1);
  716.             $getitems = $db->query("
  717.                 SELECT gp.*,p.caption
  718.                 FROM " . TABLE_PREFIX . "socialgrouppicture gp
  719.                 LEFT JOIN " . TABLE_PREFIX . "picture p on p.pictureid=gp.pictureid
  720.                 WHERE state = 'visible' AND groupid = '".$rrow['groupid'] ."'
  721.             ");
  722.             if($getitems)
  723.             {
  724.                 $par = 'do=grouppictures';
  725.                 $added_urls += vbseo_add_2urls(
  726.                     vbseo_url_group($rrow, false, VBSEO_URL_GROUPS_PIC, $par),
  727.                     vbseo_url_group($rrow, true, '', $par),
  728.                     $prior,
  729.                     $rrow['lastpost'],
  730.                     $vboptions['vbseo_sm_freq_gi']
  731.                 );
  732.             }
  733.  
  734.             while ($ritem = $db->fetch_array($getitems))
  735.             {
  736.                 vbseo_log_entry("[group] group_id: $ritem[groupid]");
  737.                 $ritem = array_merge($rrow, $ritem);
  738.  
  739.                 $par = 'do=picture';
  740.                 $added_urls += vbseo_add_2urls(
  741.                     vbseo_url_group($ritem, false, VBSEO_URL_GROUPS_PICTURE, 1),
  742.                     vbseo_url_group($ritem, true, '', $par),
  743.                     $prior,
  744.                     $ritem['dateline'],
  745.                     $vboptions['vbseo_sm_freq_gi']
  746.                 );
  747.                
  748.             }
  749.             $db->free_result($getitems);
  750.             // ------------------------
  751.             }
  752.  
  753.             if($vboptions['vbseo_sm_group_dis'] && $hasdiscussions)
  754.             {
  755.             // ------------------------
  756.                
  757.             $getitems = $db->query("
  758.                 SELECT count(*)as cnt,max(dateline) as lastupdate,discussion.visible,discussion.discussionid,max(groupmessage.title) as title
  759.                 FROM " . TABLE_PREFIX . "groupmessage AS groupmessage
  760.                 LEFT JOIN " . TABLE_PREFIX . "discussion AS discussion ON (groupmessage.discussionid = discussion.discussionid)
  761.                 WHERE discussion.deleted = 0 AND groupid='$rrow[groupid]'
  762.                 GROUP BY groupmessage.discussionid
  763.             ");
  764.             if($getitems)
  765.             while ($ritem = $db->fetch_array($getitems))
  766.             {
  767.                 $relp2 = vbseo_math_avg_weight($ritem['visible'], $stdis['minre'], $stdis['maxre'], $stdis['avgre']);
  768.                 $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rgd'], $relp2);
  769.                 vbseo_log_entry("[group] discussion_id: $ritem[discussionid]");
  770.                 $ritem = array_merge($rrow, $ritem);
  771.  
  772.                 $par = 'do=discuss';
  773.                 $added_urls += vbseo_add_2urls(
  774.                     vbseo_url_group($ritem, false, VBSEO_URL_GROUPS_DISCUSSION, $par),
  775.                     vbseo_url_group($ritem, true, '', $par),
  776.                     $prior,
  777.                     $ritem['lastupdate'],
  778.                     $vboptions['vbseo_sm_freq_gd']
  779.                 );
  780.                
  781.             }
  782.             $db->free_result($getitems);
  783.             // ------------------------
  784.             }
  785.  
  786.         }
  787.         $db->free_result($getrecords);
  788.  
  789.         return $added_urls;
  790.     }
  791.  
  792.     function vbseo_sitemap_tags()
  793.     {
  794.         global $db, $vboptions, $vbseo_vars;
  795.  
  796.         if(vbseo_check_progress(13)) return;
  797.         vbseo_log_entry("[SECTION START] tags", true);
  798.  
  799.         if(!vbseo_dbtbl_exists('tag'))
  800.             return 0;
  801.  
  802.         $added_urls = 0;
  803.  
  804.         $added_urls += vbseo_add_2urls(
  805.             vbseo_url_tag(array(), false, VBSEO_URL_TAGS_HOME),
  806.             vbseo_url_tag(array(), true),
  807.             vbseo_sm_priority($vboptions['vbseo_sm_priority_rtag'],1),
  808.             0,
  809.             $vboptions['vbseo_sm_freq_tag']
  810.         );
  811.  
  812.         $st = $db->query_first("
  813.             SELECT
  814.                 count(*) as maxre
  815.             FROM " . TABLE_PREFIX . "tagthread
  816.             GROUP BY tagid
  817.             ORDER BY maxre DESC
  818.             LIMIT 0,1
  819.         ");
  820.  
  821.         $getrecords = $db->query("
  822.             SELECT tagid, tagtext as tag
  823.             FROM " . TABLE_PREFIX . "tag
  824.         ");
  825.         $ouserid = 0;
  826.         while ($rrow = $db->fetch_array($getrecords))
  827.         {
  828.             vbseo_log_entry("[tag] tag_id: $rrow[tagid]");
  829.             $tcount = $db->query_first("
  830.                 SELECT COUNT(*) as cnt,max(lastpost) as lastupdate
  831.                 FROM " . TABLE_PREFIX . "thread AS thread
  832.                 INNER JOIN " . TABLE_PREFIX . "tagthread AS tagthread ON
  833.                     (tagthread.tagid = $rrow[tagid] AND tagthread.threadid = thread.threadid)
  834.                 WHERE thread.forumid IN(" . implode(', ', $vbseo_vars['forumslist']) . ")
  835.                     AND thread.visible = 1
  836.                     AND thread.sticky IN (0, 1)
  837.                     AND thread.open <> 10
  838.                 GROUP BY tagthread.tagid
  839.             ");
  840.             if(!$tcount['cnt'])
  841.                 continue;
  842.             $pcount = ceil($tcount['cnt']/$vboptions['maxthreads']);
  843.             $relp2 = vbseo_math_avg_weight($tcount['cnt'], 0, $st['maxre'], $st['maxre']/2);
  844.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rtag'], $relp2);
  845.             for($i=0;$i<$pcount;$i++)
  846.             {
  847.             if($i) $rrow['page'] = $i+1;
  848.             $added_urls += vbseo_add_2urls(
  849.                 vbseo_url_tag($rrow, false, $i ? VBSEO_URL_TAGS_ENTRYPAGE : VBSEO_URL_TAGS_ENTRY),
  850.                 vbseo_url_tag($rrow, true),
  851.                 $prior,
  852.                 $rrow['lastupdate'],
  853.                 $vboptions['vbseo_sm_freq_tag']
  854.             );
  855.             }
  856.  
  857.         }
  858.         $db->free_result($getrecords);
  859.  
  860.         return $added_urls;
  861.     }
  862.  
  863.     function vbseo_sitemap_homepage()
  864.     {
  865.         global $vbseo_vars;
  866.         if(vbseo_check_progress(1)) return;
  867.  
  868.         vbseo_log_entry("[homepage]", true);
  869.         vbseo_add_url($vbseo_vars['bburl'].'/', 1.0);
  870.     }
  871.  
  872.     function vbseo_sitemap_archive_homepage()
  873.     {
  874.         global $vbseo_vars;
  875.  
  876.         if(vbseo_check_progress(5)) return;
  877.  
  878.         vbseo_log_entry("[archive homepage]", true);
  879.  
  880.         vbseo_add_2urls(
  881.             $vbseo_vars['bburl'].((VBSEO_ON&&VBSEO_REWRITE_FORUM) ? VBSEO_ARCHIVE_ROOT : '/archive/index.'.VBSEO_PHP_EXT),
  882.             $vbseo_vars['bburl']. '/archive/index.'.VBSEO_PHP_EXT,
  883.             1.0);
  884.  
  885.     }
  886.  
  887. // ================================================================================
  888. // ================================================================================
  889. // ================================================================================
  890.     function vbseo_add_2urls($url, $url2, $priority = 1.0, $lastmod = 0, $freq = '')
  891.     {
  892.         global $vboptions;
  893.        
  894.         $added_urls = 1;
  895.         vbseo_add_url($url, $priority, $lastmod, $freq);
  896.         if($vboptions['vbseo_sm_oldurls'] && VBSEO_ON && $url2)
  897.         {
  898.             vbseo_add_url($url2, $priority, $lastmod, $freq);
  899.             $added_urls++;
  900.         }
  901.         return $added_urls;
  902.     }
  903.  
  904.     function vbseo_add_url($url, $priority = 1.0, $lastmod = 0, $freq = '')
  905.     {
  906.         global $vbseo_vars, $vboptions, $vbseo_stat;
  907.  
  908.         if(!$freq)
  909.             $freq = 'daily';
  910.  
  911.         if(!$lastmod)
  912.             $lastmod = time();
  913.  
  914.         if($lastmod<$vbseo_vars['tpl_update'])
  915.             $lastmod = $vbseo_vars['tpl_update'];
  916.  
  917.         if(!$priority)
  918.             $priority = $vboptions['vbseo_sm_priority'];
  919.  
  920.         $lastmod = gmdate('Y-m-d\TH:i:s+00:00', $lastmod);
  921.         if($vbseo_stat['urls_no'] == 0)
  922.             $priority = min($priority+0.0001, 1.0);
  923.  
  924.         $vbseo_vars['sitemap_content'][] = array(
  925.             'url'=> $url,
  926.             'priority'=> $priority,
  927.             'lastmod' => $lastmod,
  928.             'freq' => $freq
  929.         );
  930.    
  931.         $vbseo_stat['urls_no']++;
  932.         $vbseo_stat['urls_no_tot']++;
  933.  
  934.         if( ($vbseo_stat['urls_no'] == ($vboptions['vbseo_sm_maxurls']?$vboptions['vbseo_sm_maxurls']:50000)) )
  935.             vbseo_flush_sitemap(true);
  936.             else
  937.         if( ($vbseo_stat['urls_no'] % 1000) == 0)
  938.             vbseo_flush_sitemap(false);
  939.     }
  940.  
  941.  
  942.     function vbseo_flush_sitemap($split = true, $last = false)
  943.     {
  944.         global $vbseo_vars, $vboptions, $vbseo_stat;
  945.  
  946.         if(!$vbseo_vars['sitemap_content'])return;
  947.  
  948.         $sm_filename = vbseo_ext_gz('sitemap_'.(count($vbseo_vars['sitemap_files'])+1).'.xml');
  949.         $xs = 'xml_started_'.count($vbseo_vars['sitemap_files']);
  950.  
  951.         if(!$vbseo_vars[$xs])
  952.         {
  953.             $vbseo_vars['pfname'] = VBSEO_DAT_FOLDER . $sm_filename;
  954.             $vbseo_vars['pf'] = fopen($vbseo_vars['pfname'], 'w');
  955.         }
  956.  
  957.         if($vboptions['vbseo_sm_txt'])
  958.         {
  959.             $vbseo_vars['pf2name'] = vbseo_ext_gz(VBSEO_DAT_FOLDER . VBSEO_YAHOO_SM);
  960.             $vbseo_vars['pf2'] = fopen($vbseo_vars['pf2name'], $vbseo_vars['txt_started'] ? 'a' : 'w');
  961.         }
  962.  
  963.         if(!$vbseo_vars[$xs])
  964.         fwrite($vbseo_vars['pf'],
  965. '<?xml version="1.0" encoding="UTF-8"?>
  966. <urlset
  967.      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  968.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  969.      xsi:schemaLocation="
  970.            http://www.sitemaps.org/schemas/sitemap/0.9
  971.            http://www.sitemaps.org/schemas/sitemap/09/sitemap.xsd">');//<?php
  972.  
  973.         foreach($vbseo_vars['sitemap_content'] as $sc)
  974.         {
  975.             $xcont = "
  976. <url>
  977.  <loc>$sc[url]</loc>
  978.  <priority>$sc[priority]</priority>
  979.  <lastmod>$sc[lastmod]</lastmod>
  980.  <changefreq>$sc[freq]</changefreq>
  981. </url>";
  982.             fwrite($vbseo_vars['pf'], $xcont);
  983.        
  984.             if($vboptions['vbseo_sm_txt'])
  985.                 fwrite($vbseo_vars['pf2'], str_replace('&amp;', '&', $sc['url'])."\n");
  986.  
  987.             $vbseo_vars[$xs] += strlen($xcont);
  988.         }
  989.  
  990.  
  991.  
  992.         $vbseo_vars['sitemap_content'] = array();
  993.  
  994.         if(!$vbseo_vars['txt_started'] || $split)
  995.             $vbseo_vars['txt_started']++;
  996.  
  997.  
  998.         if(!$split)
  999.             return;
  1000.  
  1001.         fwrite($vbseo_vars['pf'], "\n</urlset>");
  1002.         fclose($vbseo_vars['pf']);
  1003.         vbseo_gz_compress($vbseo_vars['pfname']);
  1004.         @chmod(VBSEO_DAT_FOLDER . $sm_filename, 0666);
  1005.  
  1006.         if($vbseo_vars['pf2'])
  1007.         {
  1008.             fclose($vbseo_vars['pf2']);
  1009.             @chmod($vbseo_vars['pf2name'], 0666);
  1010.         }
  1011.  
  1012.         vbseo_log_entry("[create sitemap file] filename: $sm_filename, number of urls: $vbseo_stat[urls_no]", true);
  1013.  
  1014.         if($vboptions['vbseo_sm_txt'])
  1015.         {
  1016.             vbseo_log_entry("[create sitemap in text format] part #".$vbseo_vars['txt_started'], true);
  1017.         }
  1018.  
  1019.  
  1020.         $vbseo_vars['sitemap_files'][] = array(
  1021.             'url'=>vbseo_sitemap_furl($sm_filename),
  1022.             'size'=>filesize($vbseo_vars['pfname']),
  1023.             'uncompsize'=>$vbseo_vars[$xs],
  1024.             'urls'=>$vbseo_stat['urls_no'],
  1025.             );
  1026.  
  1027.         $vbseo_stat['urls_no'] = 0;
  1028.         $vbseo_vars['sm_done']++;
  1029.         vbseo_save_progress();
  1030.  
  1031.         if($vbseo_vars['sm_done']==$vbseo_vars['split_generation'])
  1032.         {
  1033.             vbseo_log_entry("[split generation] STOP", true);
  1034.             exit;
  1035.         }
  1036.        
  1037.  
  1038.         if(!$last)
  1039.             sleep($vboptions['vbseo_sm_delay']);
  1040.  
  1041.         return;
  1042.     }
  1043.  
  1044.     function vbseo_flush_index()
  1045.     {
  1046.         global $vbseo_vars, $vboptions;
  1047.  
  1048.         vbseo_flush_sitemap(true, true);
  1049.         if($vboptions['vbseo_sm_txt'])
  1050.         {
  1051.             $vbseo_vars['txt']['size'] = @filesize($vbseo_vars['pf2name']);
  1052.         }
  1053.  
  1054.         $sm_filename = vbseo_ext_gz('sitemap_index.xml');
  1055.  
  1056.         $smaps = '';
  1057.         foreach($vbseo_vars['sitemap_files'] as $smfile)
  1058.             $smaps.="<sitemap>
  1059.     <loc>".$smfile['url']."</loc>
  1060.     <lastmod>".date('Y-m-d\TH:i:s+00:00')."</lastmod>
  1061. </sitemap>\n";
  1062.  
  1063.         $smcontent =
  1064. '<?xml version="1.0" encoding="UTF-8"?>
  1065. <sitemapindex
  1066.      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  1067.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  1068.      xsi:schemaLocation="
  1069.            http://www.sitemaps.org/schemas/sitemap/0.9
  1070.            http://www.sitemaps.org/schemas/sitemap/09/siteindex.xsd">
  1071. '.$smaps.'
  1072. </sitemapindex>';//<?php
  1073.  
  1074.         vbseo_write_file(VBSEO_DAT_FOLDER . $sm_filename, $smcontent);
  1075.         vbseo_gz_compress(VBSEO_DAT_FOLDER . $sm_filename);
  1076.         vbseo_log_entry("[create sitemap index] filename: $sm_filename, number of sitemaps: ".count($vbseo_vars['sitemap_files']), true);
  1077.  
  1078.         if($vboptions['vbseo_sm_txt'])
  1079.         vbseo_gz_compress($vbseo_vars['pf2name']);
  1080.         return;
  1081.     }
  1082.  
  1083.     function vbseo_sitemap_ping_url($url)
  1084.     {
  1085.         global $vbseo_stat;
  1086.         $purl = 'http://www.google.com/webmasters/tools/ping?sitemap='.urlencode($url);
  1087.         $rping = vbseo_query_http($purl);
  1088.         $vbseo_stat['ping'] = strstr($rping, 'Received');
  1089.  
  1090.         //$purl = 'http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap='.urlencode($url);
  1091.         $purl = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid='.VBSEO_YAHOO_APPID.'&url='.urlencode($url);
  1092.  
  1093.         $rping = vbseo_query_http($purl);
  1094.         $vbseo_stat['pingyahoo'] = strstr($rping, 'successfully');
  1095.  
  1096.         $purl = 'http://submissions.ask.com/ping?sitemap='.urlencode($url);
  1097.         $rping = vbseo_query_http($purl);
  1098.         $vbseo_stat['pingask'] = strstr($rping, 'successful');
  1099.  
  1100.         $purl = 'http://api.moreover.com/ping?u='.urlencode($url);
  1101.         $rping = vbseo_query_http($purl);
  1102.         $vbseo_stat['pingmore'] = strstr($rping, 'Thank you');
  1103.  
  1104.         $purl = 'http://webmaster.live.com/webmaster/ping.aspx?siteMap='.urlencode($url);
  1105.         $rping = vbseo_query_http($purl);
  1106.         $vbseo_stat['pinglive'] = strstr($rping, 'Thanks for');
  1107.  
  1108.         return ;
  1109.     }
  1110.  
  1111.     function vbseo_sitemap_furl($sitemap)
  1112.     {
  1113.         global $vbseo_vars, $vboptions;
  1114.  
  1115.                
  1116.         return $vbseo_vars['topurl'] . '/' . ($vboptions['vbseo_sm_norwurl'] ? 'vbseo_sitemap_file.php?sitemap=':'') . $sitemap;
  1117.     }
  1118.  
  1119.     function vbseo_sitemap_ping()
  1120.     {  
  1121.         global $vbseo_vars;
  1122.  
  1123.         $smindex = vbseo_sitemap_furl('sitemap_index.xml.gz');
  1124.         return vbseo_sitemap_ping_url($smindex);
  1125.     }
  1126.  
  1127.     function vbseo_sitemap_stat($stat, $email)
  1128.     {
  1129.         global $vbseo_vars, $vboptions;
  1130.  
  1131.         $stat['txt'] = $vbseo_vars['txt'];
  1132.  
  1133.         $logfname = VBSEO_DAT_FOLDER . time() . '.log';
  1134.         $pf = fopen($logfname, 'w');
  1135.         fwrite($pf, serialize($stat));
  1136.         fclose($pf);
  1137.         @chmod($logfname, 0666);
  1138.  
  1139.         if(!$email) return;
  1140.  
  1141.  
  1142.         $mailbody =
  1143. "Hello!
  1144.  
  1145. The vBSEO Google/Yahoo Sitemap has been successfully generated for your vBulletin forums at:
  1146. $vboptions[bbtitle] ($vbseo_vars[bburl])
  1147.  
  1148. Report:
  1149. ============================
  1150. Click the following link for your vBSEO Google/Yahoo Sitemap Report:
  1151. $vbseo_vars[bburl]/vbseo_sitemap/
  1152.  
  1153. Summary:
  1154. ============================
  1155. Forum Display: ".$stat['f']."
  1156. Show Thread: ".$stat['t']."
  1157. Show Post: ".$stat['p']."
  1158. Member Profiles: ".$stat['m']."
  1159. Poll Results: ".$stat['poll']."
  1160. Blog Entries: ".$stat['blog']."
  1161. Blog Tags: ".$stat['blogtag']."
  1162. Album URLs: ".$stat['a']."
  1163. Social Groups URLs: ".$stat['g']."
  1164. Tag URLs: ".$stat['tag']."
  1165. Archive: ".($stat['af']+$stat['at'])."
  1166.  
  1167. Total Indexed URLs: ".$stat['urls_no_tot']."
  1168. Total Processing Time: ".number_format($stat['end']-$stat['start'],2)." seconds
  1169.  
  1170. Google ping: ".(isset($stat['ping'])?($stat['ping']?'Successful':'FAILED'):'Disabled').".
  1171. Yahoo ping: ".(isset($stat['pingyahoo'])?($stat['pingyahoo']?'Successful':'FAILED'):'Disabled').".
  1172. Ask ping: ".(isset($stat['pingask'])?($stat['pingask']?'Successful':'FAILED'):'Disabled').".
  1173. Moreover ping: ".(isset($stat['pingmore'])?($stat['pingmore']?'Successful':'FAILED'):'Disabled').".
  1174. Live.com ping: ".(isset($stat['pinglive'])?($stat['pinglive']?'Successful':'FAILED'):'Disabled').".
  1175.  
  1176. ============================
  1177. vBSEO(TM) c 2005-2009 Crawlability, Inc.
  1178. http://www.crawlability.com/vbseo
  1179. http://www.vbseo.com
  1180.  
  1181.  
  1182. Note for vBSEO users: This version of the sitemap generator works with vBSEO 2.4.1 up.
  1183. Please download the most recent vBSEO here: http://www.vbseo.com/downloads/
  1184. ";
  1185.  
  1186. if(!VBSEO_ON)
  1187.     $mailbody .= "
  1188.  
  1189. Find out more out vBSEO - vBulletin Search Engine Optimization
  1190. ============================
  1191.  
  1192. vBSEO is the definitive SEO enhancement for your vBulletin community forums!
  1193.  
  1194. vBSEO makes it easier for search engines to crawl more of your valuable vBulletin content faster and more often giving you higher keyword relevancy.
  1195.  
  1196. By installing vBSEO for your vBulletin forums you should expect to:
  1197.  
  1198.    * Get more of your forum pages indexed in the major search engines
  1199.    * Get your pages indexed faster
  1200.    * Improve your keyword relevancy for all pages
  1201.    * Prevent possible duplicate content penalties
  1202.  
  1203. The result of installing vBSEO you should expect is:
  1204.  
  1205.    * Higher visitor to member conversion rate (i.e. gain more new members faster)
  1206.    * Get visitors who are more highly targeted to the content you provide
  1207.    * Increase the monthly revenues earned from your forums
  1208.    * Improve your chances of achieving big-boards.com status
  1209.  
  1210. vBulletin + vBSEO
  1211. ============================
  1212. Serious forum admins choose vBSEO for increased search engine traffic!
  1213. http://www.vbseo.com/purchase/
  1214. ";
  1215.         if(function_exists('vbmail_start'))
  1216.         {
  1217.             vbmail_start();
  1218.             vbmail($email, 'vBSEO Google/Yahoo Sitemap Updated', $mailbody);
  1219.             vbmail_end();
  1220.         }else
  1221.         {
  1222.             mail($email,
  1223.             'vBSEO Google/Yahoo Sitemap Updated',
  1224.             $mailbody,
  1225.             "From: ".$email);
  1226.         }
  1227.     }
  1228.  
  1229.  
  1230. // ================================================================================
  1231. // ================================================================================
  1232. // ================================================================================
  1233.  
  1234.     function vbseo_load_progress()
  1235.     {
  1236.         global $vbseo_progress, $vbseo_stat, $vbseo_vars;
  1237.  
  1238.         $vbseo_progress = array();
  1239.         if(file_exists(VBSEO_DAT_PROGRESS))
  1240.         {
  1241.             $vbseo_progress = unserialize(implode('',file(VBSEO_DAT_PROGRESS)));
  1242.             $vbseo_stat = $vbseo_progress['stats'];
  1243.             $vbseo_vars = $vbseo_progress['vars'];
  1244.             $vbseo_vars['sm_done'] = 0;
  1245.             vbseo_log_entry("[RESUME GENERATION] step#" . $vbseo_progress['step']);
  1246.         }
  1247.     }
  1248.  
  1249.     function vbseo_save_progress()
  1250.     {
  1251.         global $vbseo_progress, $vbseo_stat, $vbseo_vars;
  1252.  
  1253.         $vbseo_progress['stats'] = $vbseo_stat;
  1254.         $vbseo_progress['vars'] = $vbseo_vars;
  1255.         $pf = fopen(VBSEO_DAT_PROGRESS,'w');
  1256.         fwrite($pf, serialize($vbseo_progress));
  1257.         fclose($pf);
  1258.         @chmod(VBSEO_DAT_PROGRESS, 0666);
  1259.     }
  1260.  
  1261.     function vbseo_clean_progress()
  1262.     {
  1263.         global $vbseo_progress;
  1264.         $vbseo_progress = array();
  1265.         unlink(VBSEO_DAT_PROGRESS);
  1266.     }
  1267.  
  1268.     function vbseo_check_progress($step)
  1269.     {
  1270.         global $vbseo_progress;
  1271.         if($vbseo_progress['step'] > $step)
  1272.             return true;
  1273.  
  1274.         if($vbseo_progress['step'] < $step)
  1275.         {
  1276.             $vbseo_progress['step2'] = $vbseo_progress['step3'] = 0;
  1277.             $vbseo_progress['step'] = $step;
  1278.         }
  1279.         return false;
  1280.     }
  1281.  
  1282.     function vbseo_url_bburl($url)
  1283.     {
  1284.         global $vbseo_vars;
  1285.         return (strstr($url, '://') ? '' : $vbseo_vars['bburl']. ($url[0]=='/' ? '' : '/')) . $url;
  1286.     }
  1287.  
  1288.     function vbseo_url_forum($forum_id, $page = 1, $archived = false, $old = false)
  1289.     {
  1290.         global $vbseo_vars;
  1291.        
  1292.         $is_vbseo = (VBSEO_ON && VBSEO_REWRITE_FORUM && !$old);
  1293.  
  1294.         if($archived)
  1295.         {
  1296.             $url = ($is_vbseo ? VBSEO_ARCHIVE_ROOT : '/archive/index.'.VBSEO_PHP_EXT.VBSEO_SLASH_METHOD) .
  1297.                 'f-'.$forum_id.($page>1?'-p-'.$page:'').'.html';
  1298.         }else
  1299.             $url = ($is_vbseo ? vbseo_forum_url($forum_id, $page) :
  1300.                 'forumdisplay.'.VBSEO_PHP_EXT.'?f='.$forum_id . ($page>1?'&amp;page='.$page:''));
  1301.  
  1302.         return vbseo_url_bburl($url);
  1303.     }
  1304.  
  1305.     function vbseo_url_blog_entry($blogrow, $old = false)
  1306.     {
  1307.         global $vbseo_vars, $g_cache;
  1308.        
  1309.         $is_vbseo = (VBSEO_ON && VBSEO_REWRITE_BLOG && !$old);
  1310.         $g_cache['blog'][$blogrow['blogid']] = $blogrow;
  1311.  
  1312.         $url =
  1313.             ($is_vbseo ?
  1314.                 vbseo_blog_url(VBSEO_URL_BLOG_ENTRY, array('b'=>$blogrow['blogid'])) :
  1315.                 'blog.'.VBSEO_PHP_EXT.'?b='.$blogrow['blogid'] );
  1316.         unset($g_cache['blog'][$blogrow['blogid']]);
  1317.         return vbseo_url_bburl($url);
  1318.     }
  1319.  
  1320.     function vbseo_url_thread($thread_row, $page = 1, $archived = false, $old = false)
  1321.     {
  1322.         global $vbseo_vars;
  1323.  
  1324.         $is_vbseo = (VBSEO_ON && VBSEO_REWRITE_THREADS && !$old);
  1325.  
  1326.         if($archived)
  1327.         {
  1328.             $url = ($is_vbseo ? VBSEO_ARCHIVE_ROOT : '/archive/index.'.VBSEO_PHP_EXT.''.VBSEO_SLASH_METHOD) .
  1329.                 't-'.$thread_row['threadid'].($page>1?'-p-'.$page:'').'.html';
  1330.         }else
  1331.             $url = ($is_vbseo ? vbseo_thread_url_row($thread_row, $page) :
  1332.             'showthread.'.VBSEO_PHP_EXT.'?t='.$thread_row['threadid'].($page>1?'&amp;page='.$page:''));
  1333.  
  1334.         return vbseo_url_bburl($url);
  1335.     }
  1336.  
  1337.     function vbseo_url_post($thread_row, $post_row, $postcount = 1, $old = false)
  1338.     {
  1339.         global $vbseo_vars;
  1340.  
  1341.         if(VBSEO_ON && VBSEO_REWRITE_SHOWPOST && !$old)
  1342.         {
  1343.             if(strstr(VBSEO_URL_POST_SHOW, '%t')||strstr(VBSEO_URL_POST_SHOW, '%f'))
  1344.             $url = vbseo_post_url_row($thread_row, $post_row, $postcount);
  1345.             else
  1346.             $url = str_replace(
  1347.                 array('%post_id%','%post_count%'),
  1348.                 array($post_row['postid'],$postcount),
  1349.                 VBSEO_URL_POST_SHOW
  1350.             );
  1351.         }else
  1352.             $url = 'showpost.'.VBSEO_PHP_EXT.'?p='.$post_row['postid'].'&amp;postcount='.$postcount;
  1353.  
  1354.         return vbseo_url_bburl($url);
  1355.     }
  1356.  
  1357.     function vbseo_url_member($userid, $username, $old = false)
  1358.     {
  1359.         global $vbseo_vars;
  1360.  
  1361.         return vbseo_url_bburl(
  1362.             ( (VBSEO_ON && VBSEO_REWRITE_MEMBERS && !$old) ? vbseo_member_url_row($userid, $username) :
  1363.              'member.'.VBSEO_PHP_EXT.'?u='.$userid)
  1364.              ) ;
  1365.     }
  1366.  
  1367.     function vbseo_url_poll($threadrow, $getpoll, $old = false)
  1368.     {
  1369.         global $vbseo_vars;
  1370.  
  1371.         return vbseo_url_bburl(
  1372.             ( (VBSEO_ON && VBSEO_REWRITE_POLLS && !$old) ? vbseo_poll_url_direct($threadrow, $getpoll) :
  1373.              'poll.'.VBSEO_PHP_EXT.'?do=showresults&amp;pollid='.$getpoll['pollid'])
  1374.              );
  1375.     }
  1376.  
  1377.     function vbseo_url_group($arow, $old = false, $format = '', $par = '')
  1378.     {
  1379.         global $vbseo_vars;
  1380.         $urlpar = $par ? array($par) : array();
  1381.         if($arow['groupid'])
  1382.             $urlpar[] = 'groupid='.$arow['groupid'];
  1383.         if($arow['pictureid'])
  1384.             $urlpar[] = 'pictureid='.$arow['pictureid'];
  1385.         if($arow['discussionid'])
  1386.             $urlpar[] = 'discussionid='.$arow['discussionid'];
  1387.         if($arow['page'])
  1388.             $urlpar[] = 'page='.$arow['page'];
  1389.  
  1390.         return vbseo_url_bburl(
  1391.             ( (VBSEO_ON && VBSEO_REWRITE_GROUPS && !$old) ?
  1392.                 (function_exists('vbseo_group_url_row') ? vbseo_group_url_row($format , $arow) : '') :
  1393.                 'group.'.VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1394.                 )
  1395.              );
  1396.     }
  1397.    
  1398.     function vbseo_url_tag($arow, $old = false, $format = '', $par = '')
  1399.     {
  1400.         global $vbseo_vars;
  1401.         if(function_exists('unhtmlspecialchars'))
  1402.             $arow['tag'] = unhtmlspecialchars($arow['tag']);
  1403.  
  1404.         $arow['tag'] = urlencode($arow['tag']);
  1405.         $urlpar = $par ? array($par) : array();
  1406.         if($arow['tag'])
  1407.             $urlpar[] = 'tag='.$arow['tag'];
  1408.         if($arow['page'])
  1409.             $urlpar[] = 'page='.$arow['page'];
  1410.  
  1411.         return vbseo_url_bburl(
  1412.             ( (VBSEO_ON && VBSEO_REWRITE_TAGS && !$old) ?
  1413.                 (function_exists('vbseo_tags_url') ? vbseo_tags_url($format , $arow) : '') :
  1414.                 'tags.'.VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1415.                 )
  1416.              );
  1417.     }
  1418.    
  1419.     function vbseo_url_blogtag($arow, $old = false, $format = '', $par = '')
  1420.     {
  1421.         global $vbseo_vars;
  1422.         if(function_exists('unhtmlspecialchars'))
  1423.             $arow['tag'] = unhtmlspecialchars($arow['tag']);
  1424.  
  1425.         $arow['tag'] = urlencode($arow['tag']);
  1426.         $urlpar = $par ? array($par) : array();
  1427.         if($arow['tag'])
  1428.             $urlpar[] = 'tag='.$arow['tag'];
  1429.         if($arow['page'])
  1430.             $urlpar[] = 'page='.$arow['page'];
  1431.  
  1432.         return vbseo_url_bburl(
  1433.             ( (VBSEO_ON && VBSEO_REWRITE_BLOGS_TAGS_ENTRY && !$old) ?
  1434.                 (function_exists('vbseo_blog_url') ? vbseo_blog_url($format , $arow) : '') :
  1435.                 ($arow['tag'] ? 'blog.' : 'blog_tag.').
  1436.                 VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1437.                 )
  1438.              );
  1439.     }
  1440.    
  1441.     function vbseo_url_album($arow, $old = false, $format = '')
  1442.     {
  1443.         global $vbseo_vars;
  1444.  
  1445.         $urlpar = array();
  1446.         if($arow['userid'])
  1447.             $urlpar[] = 'u='.$arow['userid'];
  1448.         if($arow['albumid'])
  1449.             $urlpar[] = 'albumid='.$arow['albumid'];
  1450.         if($arow['pictureid'])
  1451.             $urlpar[] = 'pictureid='.$arow['pictureid'];
  1452.         if($arow['page'])
  1453.             $urlpar[] = 'page='.$arow['page'];
  1454.  
  1455.         return vbseo_url_bburl(
  1456.             ( (VBSEO_ON && VBSEO_REWRITE_MEMBERS && !$old) ?
  1457.                 ( function_exists('vbseo_album_url_row') ? vbseo_album_url_row(
  1458.                 $format ? $format :
  1459.                 ($arow['pictureid'] ? 'VBSEO_URL_MEMBER_PICTURE' : 'VBSEO_URL_MEMBER_ALBUM'),
  1460.                 $arow):'') :
  1461.                 'album.'.VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1462.                 )
  1463.              );
  1464.     }
  1465.    
  1466. // ================================================================================
  1467. // ================================================================================
  1468. // ================================================================================
  1469.  
  1470.     function vbseo_sm_priority($pset, $pval)
  1471.     {
  1472.         global $vboptions;
  1473.         list($pmin, $pmax) = explode('-', $pset);
  1474.         if(!$vboptions['vbseo_sm_priority_smart'])
  1475.             return $pmin;
  1476.  
  1477.         $pval = min(1,max($pval,0));
  1478.         $prior = $pmin + $pval * ($pmax - $pmin);
  1479.         $prior = intval($prior*10000)/10000;
  1480.         return $prior;
  1481.     }
  1482.  
  1483.     function vbseo_math_avg_weight($value, $min, $max, $avg)
  1484.     {
  1485.         if($value > $avg)
  1486.             $relp = (($max - $avg) > 0 ?
  1487.                 ($value - $avg)/($max - $avg)*0.5 : 0 ) + 0.5;
  1488.         else
  1489.             $relp = $avg > 0 ? ($avg - $value)*0.5/$avg : 0;
  1490.  
  1491.         return $relp;
  1492.     }
  1493.  
  1494.     function vbseo_dbtbl_exists($tblname)
  1495.     {
  1496.         global $db;
  1497.         $db->hide_errors();
  1498.         $supported = $db->query_first("SHOW TABLES LIKE '" . TABLE_PREFIX . $tblname . "'");
  1499.         $db->show_errors();
  1500.         return $supported ? 1 : 0;
  1501.     }
  1502.  
  1503.     function vbseo_log_entry($message, $more_important = false)
  1504.     {
  1505.         global $vbseo_vars, $vbseo_stat;
  1506.  
  1507.         if((THIS_SCRIPT!='cron') && ($vbseo_vars['log_detailed'] || $more_important) )
  1508.         {
  1509.             if (function_exists('memory_get_usage'))
  1510.                 $message.=' ['.number_format(memory_get_usage()/1024,1).'Kb mem used]';
  1511.             $tm = array_sum(explode(' ', microtime()))-$vbseo_stat['start'];
  1512.             $message .= ' ['.number_format($tm,0).'s (+'.number_format($tm-$vbseo_vars['last_tm'],0).'s)]';
  1513.             $vbseo_vars['last_tm'] = $tm;
  1514.             echo $message."<br/>\n";
  1515.             flush();
  1516.         }
  1517.     }
  1518.  
  1519.     function vbseo_write_file($filename, &$filecont, $append = false)
  1520.     {
  1521.         $pf = fopen($filename, $append?'a':'w');
  1522.         fwrite($pf, $filecont);
  1523.         fclose($pf);
  1524.         @chmod($filename, 0666);
  1525.     }
  1526.  
  1527.     function vbseo_ext_gz($filename)
  1528.     {
  1529.         return VBSEO_SM_GZFUNC ? $filename.'.gz' : $filename;
  1530.     }
  1531.  
  1532.     function vbseo_gz_compress($filename)
  1533.     {
  1534.         if(VBSEO_SM_GZFUNC && function_exists('gzopen') && file_exists($filename))
  1535.         {
  1536.             $pf = fopen($filename, 'r');
  1537.             $fcont = fread($pf, filesize($filename));
  1538.             fclose($pf);
  1539.  
  1540.             $gf = gzopen($filename, 'w');
  1541.             gzwrite($gf, $fcont);
  1542.             gzclose($gf);
  1543.         }
  1544.     }
  1545.  
  1546.     function vbseo_file_gz($filename)
  1547.     {
  1548.         if(file_exists(VBSEO_DAT_FOLDER.$filename.'.gz'))
  1549.             return $filename.'.gz';
  1550.             else
  1551.             return $filename;
  1552.     }
  1553.  
  1554.     function vbseo_sm_prune($dir)
  1555.     {    
  1556.         if(defined('VBSEO_SM_PRUNE') && VBSEO_SM_PRUNE)
  1557.         {
  1558.             $prune_limit = time() - VBSEO_SM_PRUNE * 24 * 60 * 60;
  1559.             if(is_dir($dir))
  1560.             {
  1561.                 $pd = @opendir($dir);
  1562.                 while($fn = @readdir($pd))
  1563.                 if(strstr($fn, '.log') && (filemtime($dir.$fn)< $prune_limit))
  1564.                     unlink($dir.$fn);
  1565.                 @closedir($pd);
  1566.             }else
  1567.             if(function_exists('vbseo_get_dllog'))
  1568.             {
  1569.                 $dl_list = vbseo_get_dllog();
  1570.                 $dl_list2 = array();
  1571.                 foreach($dl_list as $dl)
  1572.                     if($dl['time'] >= $prune_limit)
  1573.                     $dl_list2[] = $dl;
  1574.  
  1575.                 $pf = fopen(VBSEO_SM_DLDAT, 'w');
  1576.                 fwrite($pf, serialize($dl_list2));
  1577.                 fclose($pf);
  1578.             }
  1579.            
  1580.         }
  1581.     }
  1582.  
  1583.     function vbseo_query_http($url)
  1584.     {
  1585.  
  1586.         $s = @implode('', file($url));
  1587.         if(!$s)
  1588.             $s = vbseo_query_http_socket($url);
  1589.         return $s;
  1590.     }
  1591.  
  1592.     function vbseo_query_http_socket($url)
  1593.     {
  1594.         ini_set('default_socket_timeout', 5);
  1595.         $purl = parse_url($url);
  1596.         $connsocket = @fsockopen($purl['host'], 80, $errno, $errstr, 5);
  1597.         $start = 0;
  1598.         $timeout = 50;
  1599.         while($start < $timeout)
  1600.         {
  1601.             $start++;
  1602.             if ($connsocket)
  1603.             {
  1604.              $out = "GET ".$purl['path']."?".$purl['query']." HTTP/1.1\n";
  1605.              $out .= "Host: ".$purl['host']."\n";
  1606.              $out .= "Referer: http://".$purl['host']."/\n";
  1607.              $out .= "Connection: Close\n\n";
  1608.              $inp = '';
  1609.              @fwrite($connsocket, $out);
  1610.              while (!feof($connsocket)) {
  1611.                 $inp .= @fread($connsocket, 4096);
  1612.              }
  1613.              @fclose($connsocket);
  1614.              break;
  1615.             }
  1616.  
  1617.         }
  1618.         preg_match("#^(.*?)\r?\n\r?\n(.*)$#s",$inp,$hm);
  1619.         return $hm[2];
  1620.     }
  1621. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement