Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2010
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 52.87 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. for($p=1; $p<=$totalpages; $p++)
  306.                 {
  307. //additional code  
  308. $alanguages = array ('af','sq','ar','be','bg','ca','zh-CN','hr','cs','da','nl','en','pl','et','tl','fi','fr','gl','el','iw','hi','hu','is','id','ga','it','ja','ko','lv','lt','mk','ms','mt','no','fa','pt','ro','ru','sr','sk','sl','es','sw','sv','zh-TW','th','tr','uk','vi','cy','yi');  
  309. if(!$archived) {  
  310.   $strlenhost = strlen($vbseo_vars['bburl']."/");  
  311.   $currentthreadurl = vbseo_url_thread($threadrow, $p, $archived);
  312.   $currentthreadurl_before = substr($currentthreadurl,0,$strlenhost);
  313.   $currentthreadurl_after = "/".substr($currentthreadurl,$strlenhost);
  314.   $lastpost =& $threadrow['lastpost'];
  315.   $vbseo_stat['t'] += sizeof($alanguages);
  316.   foreach($alanguages as $language) {  
  317.     vbseo_add_url($currentthreadurl_before.$language.$currentthreadurl_after, $prior, $lastpost, $freq);  
  318.   }  
  319. }    
  320. //end additional code  
  321.                 $vbseo_stat[$archived?'at':'t'] += vbseo_add_2urls(
  322.                     vbseo_url_thread($threadrow, $p, $archived),
  323.                     $prior,
  324.                     $threadrow['lastpost'],
  325.                     $freq
  326.                 );
  327.                
  328.                 }
  329.  
  330.                 if($showpost)
  331.                 {
  332.  
  333.                 $getposts = $db->query("
  334.                     SELECT p.dateline,p.postid,p.threadid
  335.                     FROM " . TABLE_PREFIX . "post AS p
  336.                     WHERE p.threadid = $threadrow[threadid]
  337.                         AND visible = 1
  338.                     ORDER BY p.dateline
  339.                 ");
  340.                
  341.                 $pcount = 0;
  342.                 while ($postrow = $db->fetch_array($getposts))
  343.                 {
  344.                     $pcount++;
  345.                     vbseo_log_entry("[showpost] forum_id: $forumid, thread_id: $postrow[threadid], post_id: $postrow[postid]");
  346.                     $relp = $relp*0.8+$pcount/($threadrow['replycount']+1)*0.2;
  347.                     $prior2 = vbseo_sm_priority($vboptions['vbseo_sm_priority_rp'], $relp);
  348.                     $vbseo_stat['p'] += vbseo_add_2urls(
  349.                         vbseo_url_post($threadrow, $postrow, $pcount),
  350.                         vbseo_url_post($threadrow, $postrow, $pcount, true),
  351.                         $prior2,
  352.                         $postrow['dateline'],
  353.                         $vboptions['vbseo_sm_freq_p']
  354.                     );
  355.                 }
  356.                 $db->free_result($getposts);
  357.                 }
  358.             }
  359.             $db->free_result($getthreads);
  360.             $vbseo_progress['step3'] = 0;
  361.         }
  362.     }
  363.  
  364.     function vbseo_sitemap_polls()
  365.     {
  366.         global $db, $vboptions, $vbseo_vars;
  367.  
  368.         if(vbseo_check_progress(9)) return;
  369.         $added_urls = 0;
  370.         vbseo_log_entry("[SECTION START] polls", true);
  371.  
  372.         $st = $db->query_first("
  373.             SELECT
  374.                 max(voters) as maxre,min(voters) as minre,avg(voters) as avgre
  375.             FROM " . TABLE_PREFIX . "poll
  376.         ");
  377.         foreach($vbseo_vars['forumslist'] as $forumid)
  378.         {
  379.             $getthreads = $db->query("
  380.                 SELECT *
  381.                 FROM " . TABLE_PREFIX . "thread AS thread
  382.                 WHERE forumid = $forumid
  383.                     AND visible = 1
  384.                     AND pollid > 0
  385.             ");
  386.  
  387.             while ($threadrow = $db->fetch_array($getthreads))
  388.             {
  389.                 $getpoll = $db->query_first("
  390.                     SELECT *
  391.                     FROM " . TABLE_PREFIX . "poll
  392.                     WHERE pollid = ".$threadrow['pollid']."
  393.                 ");
  394.                 if(!$getpoll)
  395.                     continue;
  396.  
  397.                 vbseo_log_entry("[poll] forum_id: $forumid, thread_id: $threadrow[threadid], pollid: $threadrow[pollid]");
  398.  
  399.                 $added_urls++;
  400.  
  401.                 $relp2 = vbseo_math_avg_weight($getpoll['voters'], $st['minre'], $st['maxre'], $st['avgre']);
  402.                 $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rpoll'], $relp2);
  403.                 $added_urls += vbseo_add_2urls(
  404.                     vbseo_url_poll($threadrow, $getpoll),
  405.                     vbseo_url_poll($threadrow, $getpoll, true),
  406.                     $prior,
  407.                     $getpoll['dateline'],
  408.                     $vboptions['vbseo_sm_freq_poll']
  409.                 );
  410.                
  411.             }
  412.             $db->free_result($getthreads);
  413.         }
  414.         return $added_urls;
  415.     }
  416.  
  417.     function vbseo_sitemap_blogs()
  418.     {
  419.         global $db, $vboptions, $vbseo_vars;
  420.  
  421.         if(vbseo_check_progress(10)) return;
  422.         vbseo_log_entry("[SECTION START] blogs", true);
  423.         vbseo_add_url(VBSEO_ON ? vbseo_any_url($vbseo_vars['bburl'].'/blog.'.VBSEO_PHP_EXT) : $vbseo_vars['bburl'].'/blog.'.VBSEO_PHP_EXT, 1.0);
  424.         $added_urls = 0;
  425.  
  426.         if(!vbseo_dbtbl_exists('blog'))
  427.             return 0;
  428.  
  429.         $st = $db->query_first("
  430.             SELECT
  431.                 max(views) as maxre,min(views) as minre,avg(views) as avgre
  432.             FROM " . TABLE_PREFIX . "blog
  433.             WHERE state='visible'
  434.         ");
  435.         $getblogs = $db->query("
  436.             SELECT *
  437.             FROM " . TABLE_PREFIX . "blog
  438.             WHERE state = 'visible'
  439.         ");
  440.         while ($blogrow = $db->fetch_array($getblogs))
  441.         {
  442.             vbseo_log_entry("[blog] blog_id: $blogrow[blogid]");
  443.  
  444.             $relp2 = vbseo_math_avg_weight($blogrow['views'], $st['minre'], $st['maxre'], $st['avgre']);
  445.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rb'], $relp2);
  446.             $added_urls += vbseo_add_2urls(
  447.                 vbseo_url_blog_entry($blogrow),
  448.                 vbseo_url_blog_entry($blogrow, true),
  449.                 $prior,
  450.                 $blogrow['dateline'],
  451.                 $vboptions['vbseo_sm_freq_b']
  452.             );
  453.            
  454.         }
  455.         $db->free_result($getblogs);
  456.         return $added_urls;
  457.     }
  458.  
  459.     function vbseo_sitemap_blog_tags()
  460.     {
  461.         global $db, $vboptions, $vbseo_vars;
  462.  
  463.         if(vbseo_check_progress(14)) return;
  464.         vbseo_log_entry("[SECTION START] blog tags", true);
  465.  
  466.         if(!vbseo_dbtbl_exists('blog_tag'))
  467.             return 0;
  468.  
  469.         $added_urls = 0;
  470.  
  471.         $added_urls += vbseo_add_2urls(
  472.             vbseo_url_blogtag(array(), false, VBSEO_URL_BLOG_TAGS_HOME),
  473.             vbseo_url_blogtag(array(), true),
  474.             vbseo_sm_priority($vboptions['vbseo_sm_priority_rblogtag'],1),
  475.             0,
  476.             $vboptions['vbseo_sm_freq_blogtag']
  477.         );
  478.  
  479.         $st = $db->query_first("
  480.             SELECT
  481.                 count(*) as maxre
  482.             FROM " . TABLE_PREFIX . "blog_tagentry
  483.             GROUP BY tagid
  484.             ORDER BY maxre DESC
  485.             LIMIT 0,1
  486.         ");
  487.  
  488.         $getrecords = $db->query("
  489.             SELECT tagid, tagtext as tag
  490.             FROM " . TABLE_PREFIX . "blog_tag
  491.         ");
  492.         $ouserid = 0;
  493.         while ($rrow = $db->fetch_array($getrecords))
  494.         {
  495.             vbseo_log_entry("[tag] tag_id: $rrow[tagid]");
  496.             $tcount = $db->query_first("
  497.                 SELECT COUNT(*) as cnt,max(lastcomment) as lastupdate
  498.                 FROM " . TABLE_PREFIX . "blog AS blog
  499.                 INNER JOIN " . TABLE_PREFIX . "blog_tagentry AS tagentry ON
  500.                     (tagentry.tagid = $rrow[tagid] AND tagentry.blogid = blog.blogid)
  501.                 WHERE
  502.                     blog.state = 'visible'
  503.                 GROUP BY tagentry.tagid
  504.             ");
  505.             if(!$tcount['cnt'])
  506.                 continue;
  507.             $pcount = ceil($tcount['cnt']/$vboptions['vbblog_perpage']);
  508.             $relp2 = vbseo_math_avg_weight($tcount['cnt'], 0, $st['maxre'], $st['maxre']/2);
  509.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rblogtag'], $relp2);
  510.             for($i=0;$i<$pcount;$i++)
  511.             {
  512.             if($i) $rrow['page'] = $i+1;
  513.             $added_urls += vbseo_add_2urls(
  514.                 vbseo_url_blogtag($rrow, false, $i ? VBSEO_URL_BLOG_TAGS_ENTRY_PAGE : VBSEO_URL_BLOG_TAGS_ENTRY),
  515.                 vbseo_url_blogtag($rrow, true),
  516.                 $prior,
  517.                 $rrow['lastupdate'],
  518.                 $vboptions['vbseo_sm_freq_blogtag']
  519.             );
  520.             }
  521.  
  522.         }
  523.         $db->free_result($getrecords);
  524.  
  525.         return $added_urls;
  526.     }
  527.  
  528.     function vbseo_sitemap_member()
  529.     {
  530.         global $db, $vboptions;
  531.  
  532.         if(vbseo_check_progress(8)) return;
  533.         vbseo_log_entry("[SECTION START] member", true);
  534.  
  535.         $added_urls = 0;
  536.         $st = $db->query_first("
  537.             SELECT
  538.                 count(*) as cnt,
  539.                 max(posts) as maxre,min(posts) as minre,avg(posts) as avgre
  540.             FROM " . TABLE_PREFIX . "user
  541.         ");
  542.         $getmembers = $db->query("
  543.             SELECT userid, username, lastpost,posts
  544.             FROM " . TABLE_PREFIX . "user
  545.             ORDER BY username
  546.             LIMIT ".intval($vbseo_progress['step2']).",".$st['cnt']."
  547.         ");
  548.        
  549.         while ($member = $db->fetch_array($getmembers))
  550.         {
  551.             vbseo_log_entry("[member] user_id: $member[userid]");
  552.             $vbseo_progress['step2']++;
  553.        
  554.             $relp2 = vbseo_math_avg_weight($member['posts'], $st['minre'], $st['maxre'], $st['avgre']);
  555.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rm'], $relp2);
  556.             $added_urls += vbseo_add_2urls(
  557.                 vbseo_url_member($member['userid'], $member['username']),
  558.                 vbseo_url_member($member['userid'], $member['username'], true),
  559.                 $prior,
  560.                 $member['lastpost'],
  561.                 $vboptions['vbseo_sm_freq_m']
  562.             );
  563.         }
  564.         $db->free_result($getmembers);
  565.         return $added_urls;
  566.     }
  567.  
  568.     function vbseo_sitemap_albums()
  569.     {
  570.         global $db, $vboptions, $vbseo_vars;
  571.  
  572.         if(vbseo_check_progress(11)) return;
  573.         vbseo_log_entry("[SECTION START] albums", true);
  574.  
  575.         if(!vbseo_dbtbl_exists('album') )
  576.             return 0;
  577.  
  578.         $added_urls = 0;
  579.  
  580.         $st = $db->query_first("
  581.             SELECT
  582.                 count(*) as cnt,
  583.                 max(posts) as maxre,min(posts) as minre,avg(posts) as avgre
  584.             FROM " . TABLE_PREFIX . "user
  585.         ");
  586.         $getrecords = $db->query("
  587.             SELECT a.*,u.username,u.posts
  588.             FROM " . TABLE_PREFIX . "album a
  589.             LEFT JOIN " . TABLE_PREFIX . "user u on u.userid=a.userid
  590.             WHERE visible = 2
  591.             ORDER BY userid
  592.         ");
  593.         $ouserid = 0;
  594.         while ($rrow = $db->fetch_array($getrecords))
  595.         {
  596.             vbseo_log_entry("[album] album_id: $rrow[albumid]");
  597.  
  598.             $relp2 = vbseo_math_avg_weight($rrow['posts'], $st['minre'], $st['maxre'], $st['avgre']);
  599.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_ra'], $relp2);
  600.  
  601.             if($ouserid!=$rrow['userid'])
  602.             {
  603.             $rrow2 = $rrow;
  604.             unset($rrow2['albumid']);
  605.             $added_urls += vbseo_add_2urls(
  606.                 vbseo_url_album($rrow2, false, 'VBSEO_URL_MEMBER_ALBUMS'),
  607.                 vbseo_url_album($rrow2, true),
  608.                 $prior,
  609.                 $rrow['lastpicturedate'],
  610.                 $vboptions['vbseo_sm_freq_a']
  611.             );
  612.             $ouserid = $rrow['userid'];
  613.             }
  614.  
  615.             $added_urls += vbseo_add_2urls(
  616.                 vbseo_url_album($rrow, false, 'VBSEO_URL_MEMBER_ALBUM'),
  617.                 vbseo_url_album($rrow, true),
  618.                 $prior*0.8,
  619.                 $rrow['lastpicturedate'],
  620.                 $vboptions['vbseo_sm_freq_a']
  621.             );
  622.            
  623.             $getitems = $db->query("
  624.                 SELECT ap.*,p.caption
  625.                 FROM " . TABLE_PREFIX . "albumpicture ap
  626.                 LEFT JOIN " . TABLE_PREFIX . "picture p on p.pictureid=ap.pictureid
  627.                 WHERE state = 'visible' AND albumid = '".$rrow['albumid'] ."'
  628.             ");
  629.             while ($ritem = $db->fetch_array($getitems))
  630.             {
  631.                 vbseo_log_entry("[picture] picture_id: $ritem[pictureid]");
  632.                 $ritem = array_merge($rrow, $ritem);
  633.  
  634.                 $added_urls += vbseo_add_2urls(
  635.                     vbseo_url_album($ritem, false, 'VBSEO_URL_MEMBER_PICTURE'),
  636.                     vbseo_url_album($ritem, true),
  637.                     $prior,
  638.                     $ritem['dateline'],
  639.                     $vboptions['vbseo_sm_freq_a']
  640.                 );
  641.                
  642.             }
  643.             $db->free_result($getitems);
  644.         }
  645.         $db->free_result($getrecords);
  646.  
  647.         return $added_urls;
  648.     }
  649.  
  650.     function vbseo_sitemap_groups()
  651.     {
  652.         global $db, $vboptions, $vbseo_vars;
  653.  
  654.         if(vbseo_check_progress(12)) return;
  655.         vbseo_log_entry("[SECTION START] groups", true);
  656.  
  657.         if(!vbseo_dbtbl_exists('socialgroup'))
  658.             return 0;
  659.  
  660.         $added_urls = 0;
  661.  
  662.         $added_urls += vbseo_add_2urls(
  663.             vbseo_url_group(array(), false, VBSEO_URL_GROUPS_HOME),
  664.             vbseo_url_group(array(), true),
  665.             vbseo_sm_priority($vboptions['vbseo_sm_priority_rg'],1),
  666.             0,
  667.             $vboptions['vbseo_sm_freq_g']
  668.         );
  669.  
  670.         $st = $db->query_first("
  671.             SELECT
  672.                 max(members) as maxre,min(members) as minre,avg(members) as avgre
  673.             FROM " . TABLE_PREFIX . "socialgroup
  674.         ");
  675.  
  676.         $getrecords = $db->query("
  677.             SELECT g.*
  678.             FROM " . TABLE_PREFIX . "socialgroup g
  679.             WHERE type = 'public'
  680.         ");
  681.  
  682.         $hasdiscussions = vbseo_dbtbl_exists('discussion');
  683.  
  684.         if($hasdiscussions)
  685.         $stdis = $db->query_first("
  686.             SELECT
  687.                 max(visible) as maxre,min(visible) as minre,avg(visible) as avgre
  688.             FROM " . TABLE_PREFIX . "discussion
  689.             WHERE deleted=0 AND groupid>0
  690.         ");
  691.  
  692.         $ouserid = 0;
  693.         while ($rrow = $db->fetch_array($getrecords))
  694.         {
  695.             vbseo_log_entry("[album] group_id: $rrow[groupid]");
  696.             $tcount = $db->query_first("
  697.                 SELECT count(*)as cnt,max(dateline) as lastupdate
  698.                 FROM " . TABLE_PREFIX . "groupmessage AS groupmessage
  699.                 ".($hasdiscussions?"LEFT JOIN " . TABLE_PREFIX . "discussion AS discussion ON (groupmessage.discussionid = discussion.discussionid)":"")."
  700.                 WHERE ".
  701.                 ($hasdiscussions ? "discussion.deleted = 0 AND discussion.":"").
  702.                     "groupid='$rrow[groupid]'
  703.             ");
  704.             $pcount = max(1, ceil($tcount['cnt']/$vboptions['vm_perpage']));
  705.             $rrow2 = $rrow;
  706.            
  707.             $relp2 = vbseo_math_avg_weight($rrow['members'], $st['minre'], $st['maxre'], $st['avgre']);
  708.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rg'], $relp2);
  709.  
  710.             if($vboptions['vbseo_sm_group'])
  711.             for($i=0;$i<$pcount;$i++)
  712.             {
  713.             if($i) $rrow2['page'] = $i+1;
  714.             $added_urls += vbseo_add_2urls(
  715.                 vbseo_url_group($rrow2, false, $i ? VBSEO_URL_GROUPS_PAGE : VBSEO_URL_GROUPS),
  716.                 vbseo_url_group($rrow2, true),
  717.                 $prior,
  718.                 $rrow['lastupdate'],
  719.                 $vboptions['vbseo_sm_freq_g']
  720.             );
  721.             }
  722.  
  723.             if($vboptions['vbseo_sm_group_img'])
  724.             {
  725.             // ------------------------
  726.                
  727.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rgi'], 1);
  728.             $getitems = $db->query("
  729.                 SELECT gp.*,p.caption
  730.                 FROM " . TABLE_PREFIX . "socialgrouppicture gp
  731.                 LEFT JOIN " . TABLE_PREFIX . "picture p on p.pictureid=gp.pictureid
  732.                 WHERE state = 'visible' AND groupid = '".$rrow['groupid'] ."'
  733.             ");
  734.             if($getitems)
  735.             {
  736.                 $par = 'do=grouppictures';
  737.                 $added_urls += vbseo_add_2urls(
  738.                     vbseo_url_group($rrow, false, VBSEO_URL_GROUPS_PIC, $par),
  739.                     vbseo_url_group($rrow, true, '', $par),
  740.                     $prior,
  741.                     $rrow['lastpost'],
  742.                     $vboptions['vbseo_sm_freq_gi']
  743.                 );
  744.             }
  745.  
  746.             while ($ritem = $db->fetch_array($getitems))
  747.             {
  748.                 vbseo_log_entry("[group] group_id: $ritem[groupid]");
  749.                 $ritem = array_merge($rrow, $ritem);
  750.  
  751.                 $par = 'do=picture';
  752.                 $added_urls += vbseo_add_2urls(
  753.                     vbseo_url_group($ritem, false, VBSEO_URL_GROUPS_PICTURE, 1),
  754.                     vbseo_url_group($ritem, true, '', $par),
  755.                     $prior,
  756.                     $ritem['dateline'],
  757.                     $vboptions['vbseo_sm_freq_gi']
  758.                 );
  759.                
  760.             }
  761.             $db->free_result($getitems);
  762.             // ------------------------
  763.             }
  764.  
  765.             if($vboptions['vbseo_sm_group_dis'] && $hasdiscussions)
  766.             {
  767.             // ------------------------
  768.                
  769.             $getitems = $db->query("
  770.                 SELECT count(*)as cnt,max(dateline) as lastupdate,discussion.visible,discussion.discussionid,max(groupmessage.title) as title
  771.                 FROM " . TABLE_PREFIX . "groupmessage AS groupmessage
  772.                 LEFT JOIN " . TABLE_PREFIX . "discussion AS discussion ON (groupmessage.discussionid = discussion.discussionid)
  773.                 WHERE discussion.deleted = 0 AND groupid='$rrow[groupid]'
  774.                 GROUP BY groupmessage.discussionid
  775.             ");
  776.             if($getitems)
  777.             while ($ritem = $db->fetch_array($getitems))
  778.             {
  779.                 $relp2 = vbseo_math_avg_weight($ritem['visible'], $stdis['minre'], $stdis['maxre'], $stdis['avgre']);
  780.                 $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rgd'], $relp2);
  781.                 vbseo_log_entry("[group] discussion_id: $ritem[discussionid]");
  782.                 $ritem = array_merge($rrow, $ritem);
  783.  
  784.                 $par = 'do=discuss';
  785.                 $added_urls += vbseo_add_2urls(
  786.                     vbseo_url_group($ritem, false, VBSEO_URL_GROUPS_DISCUSSION, $par),
  787.                     vbseo_url_group($ritem, true, '', $par),
  788.                     $prior,
  789.                     $ritem['lastupdate'],
  790.                     $vboptions['vbseo_sm_freq_gd']
  791.                 );
  792.                
  793.             }
  794.             $db->free_result($getitems);
  795.             // ------------------------
  796.             }
  797.  
  798.         }
  799.         $db->free_result($getrecords);
  800.  
  801.         return $added_urls;
  802.     }
  803.  
  804.     function vbseo_sitemap_tags()
  805.     {
  806.         global $db, $vboptions, $vbseo_vars;
  807.  
  808.         if(vbseo_check_progress(13)) return;
  809.         vbseo_log_entry("[SECTION START] tags", true);
  810.  
  811.         if(!vbseo_dbtbl_exists('tag'))
  812.             return 0;
  813.  
  814.         $added_urls = 0;
  815.  
  816.         $added_urls += vbseo_add_2urls(
  817.             vbseo_url_tag(array(), false, VBSEO_URL_TAGS_HOME),
  818.             vbseo_url_tag(array(), true),
  819.             vbseo_sm_priority($vboptions['vbseo_sm_priority_rtag'],1),
  820.             0,
  821.             $vboptions['vbseo_sm_freq_tag']
  822.         );
  823.  
  824.         $st = $db->query_first("
  825.             SELECT
  826.                 count(*) as maxre
  827.             FROM " . TABLE_PREFIX . "tagthread
  828.             GROUP BY tagid
  829.             ORDER BY maxre DESC
  830.             LIMIT 0,1
  831.         ");
  832.  
  833.         $getrecords = $db->query("
  834.             SELECT tagid, tagtext as tag
  835.             FROM " . TABLE_PREFIX . "tag
  836.         ");
  837.         $ouserid = 0;
  838.         while ($rrow = $db->fetch_array($getrecords))
  839.         {
  840.             vbseo_log_entry("[tag] tag_id: $rrow[tagid]");
  841.             $tcount = $db->query_first("
  842.                 SELECT COUNT(*) as cnt,max(lastpost) as lastupdate
  843.                 FROM " . TABLE_PREFIX . "thread AS thread
  844.                 INNER JOIN " . TABLE_PREFIX . "tagthread AS tagthread ON
  845.                     (tagthread.tagid = $rrow[tagid] AND tagthread.threadid = thread.threadid)
  846.                 WHERE thread.forumid IN(" . implode(', ', $vbseo_vars['forumslist']) . ")
  847.                     AND thread.visible = 1
  848.                     AND thread.sticky IN (0, 1)
  849.                     AND thread.open <> 10
  850.                 GROUP BY tagthread.tagid
  851.             ");
  852.             if(!$tcount['cnt'])
  853.                 continue;
  854.             $pcount = ceil($tcount['cnt']/$vboptions['maxthreads']);
  855.             $relp2 = vbseo_math_avg_weight($tcount['cnt'], 0, $st['maxre'], $st['maxre']/2);
  856.             $prior = vbseo_sm_priority($vboptions['vbseo_sm_priority_rtag'], $relp2);
  857.             for($i=0;$i<$pcount;$i++)
  858.             {
  859.             if($i) $rrow['page'] = $i+1;
  860.             $added_urls += vbseo_add_2urls(
  861.                 vbseo_url_tag($rrow, false, $i ? VBSEO_URL_TAGS_ENTRYPAGE : VBSEO_URL_TAGS_ENTRY),
  862.                 vbseo_url_tag($rrow, true),
  863.                 $prior,
  864.                 $rrow['lastupdate'],
  865.                 $vboptions['vbseo_sm_freq_tag']
  866.             );
  867.             }
  868.  
  869.         }
  870.         $db->free_result($getrecords);
  871.  
  872.         return $added_urls;
  873.     }
  874.  
  875.     function vbseo_sitemap_homepage()
  876.     {
  877.         global $vbseo_vars;
  878.         if(vbseo_check_progress(1)) return;
  879.  
  880.         vbseo_log_entry("[homepage]", true);
  881.         vbseo_add_url($vbseo_vars['bburl'].'/', 1.0);
  882.     }
  883.  
  884.     function vbseo_sitemap_archive_homepage()
  885.     {
  886.         global $vbseo_vars;
  887.  
  888.         if(vbseo_check_progress(5)) return;
  889.  
  890.         vbseo_log_entry("[archive homepage]", true);
  891.  
  892.         vbseo_add_2urls(
  893.             $vbseo_vars['bburl'].((VBSEO_ON&&VBSEO_REWRITE_FORUM) ? VBSEO_ARCHIVE_ROOT : '/archive/index.'.VBSEO_PHP_EXT),
  894.             $vbseo_vars['bburl']. '/archive/index.'.VBSEO_PHP_EXT,
  895.             1.0);
  896.  
  897.     }
  898.  
  899. // ================================================================================
  900. // ================================================================================
  901. // ================================================================================
  902.     function vbseo_add_2urls($url, $url2, $priority = 1.0, $lastmod = 0, $freq = '')
  903.     {
  904.         global $vboptions;
  905.        
  906.         $added_urls = 1;
  907.         vbseo_add_url($url, $priority, $lastmod, $freq);
  908.         if($vboptions['vbseo_sm_oldurls'] && VBSEO_ON && $url2)
  909.         {
  910.             vbseo_add_url($url2, $priority, $lastmod, $freq);
  911.             $added_urls++;
  912.         }
  913.         return $added_urls;
  914.     }
  915.  
  916.     function vbseo_add_url($url, $priority = 1.0, $lastmod = 0, $freq = '')
  917.     {
  918.         global $vbseo_vars, $vboptions, $vbseo_stat;
  919.  
  920.         if(!$freq)
  921.             $freq = 'daily';
  922.  
  923.         if(!$lastmod)
  924.             $lastmod = time();
  925.  
  926.         if($lastmod<$vbseo_vars['tpl_update'])
  927.             $lastmod = $vbseo_vars['tpl_update'];
  928.  
  929.         if(!$priority)
  930.             $priority = $vboptions['vbseo_sm_priority'];
  931.  
  932.         $lastmod = gmdate('Y-m-d\TH:i:s+00:00', $lastmod);
  933.         if($vbseo_stat['urls_no'] == 0)
  934.             $priority = min($priority+0.0001, 1.0);
  935.  
  936.         $vbseo_vars['sitemap_content'][] = array(
  937.             'url'=> $url,
  938.             'priority'=> $priority,
  939.             'lastmod' => $lastmod,
  940.             'freq' => $freq
  941.         );
  942.    
  943.         $vbseo_stat['urls_no']++;
  944.         $vbseo_stat['urls_no_tot']++;
  945.  
  946.         if( ($vbseo_stat['urls_no'] == ($vboptions['vbseo_sm_maxurls']?$vboptions['vbseo_sm_maxurls']:50000)) )
  947.             vbseo_flush_sitemap(true);
  948.             else
  949.         if( ($vbseo_stat['urls_no'] % 1000) == 0)
  950.             vbseo_flush_sitemap(false);
  951.     }
  952.  
  953.  
  954.     function vbseo_flush_sitemap($split = true, $last = false)
  955.     {
  956.         global $vbseo_vars, $vboptions, $vbseo_stat;
  957.  
  958.         if(!$vbseo_vars['sitemap_content'])return;
  959.  
  960.         $sm_filename = vbseo_ext_gz('sitemap_'.(count($vbseo_vars['sitemap_files'])+1).'.xml');
  961.         $xs = 'xml_started_'.count($vbseo_vars['sitemap_files']);
  962.  
  963.         if(!$vbseo_vars[$xs])
  964.         {
  965.             $vbseo_vars['pfname'] = VBSEO_DAT_FOLDER . $sm_filename;
  966.             $vbseo_vars['pf'] = fopen($vbseo_vars['pfname'], 'w');
  967.         }
  968.  
  969.         if($vboptions['vbseo_sm_txt'])
  970.         {
  971.             $vbseo_vars['pf2name'] = vbseo_ext_gz(VBSEO_DAT_FOLDER . VBSEO_YAHOO_SM);
  972.             $vbseo_vars['pf2'] = fopen($vbseo_vars['pf2name'], $vbseo_vars['txt_started'] ? 'a' : 'w');
  973.         }
  974.  
  975.         if(!$vbseo_vars[$xs])
  976.         fwrite($vbseo_vars['pf'],
  977. '<?xml version="1.0" encoding="UTF-8"?>
  978. <urlset
  979.      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  980.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  981.      xsi:schemaLocation="
  982.            http://www.sitemaps.org/schemas/sitemap/0.9
  983.            http://www.sitemaps.org/schemas/sitemap/09/sitemap.xsd">');//<?php
  984.  
  985.         foreach($vbseo_vars['sitemap_content'] as $sc)
  986.         {
  987.             $xcont = "
  988. <url>
  989.  <loc>$sc[url]</loc>
  990.  <priority>$sc[priority]</priority>
  991.  <lastmod>$sc[lastmod]</lastmod>
  992.  <changefreq>$sc[freq]</changefreq>
  993. </url>";
  994.             fwrite($vbseo_vars['pf'], $xcont);
  995.        
  996.             if($vboptions['vbseo_sm_txt'])
  997.                 fwrite($vbseo_vars['pf2'], str_replace('&amp;', '&', $sc['url'])."\n");
  998.  
  999.             $vbseo_vars[$xs] += strlen($xcont);
  1000.         }
  1001.  
  1002.  
  1003.  
  1004.         $vbseo_vars['sitemap_content'] = array();
  1005.  
  1006.         if(!$vbseo_vars['txt_started'] || $split)
  1007.             $vbseo_vars['txt_started']++;
  1008.  
  1009.  
  1010.         if(!$split)
  1011.             return;
  1012.  
  1013.         fwrite($vbseo_vars['pf'], "\n</urlset>");
  1014.         fclose($vbseo_vars['pf']);
  1015.         vbseo_gz_compress($vbseo_vars['pfname']);
  1016.         @chmod(VBSEO_DAT_FOLDER . $sm_filename, 0666);
  1017.  
  1018.         if($vbseo_vars['pf2'])
  1019.         {
  1020.             fclose($vbseo_vars['pf2']);
  1021.             @chmod($vbseo_vars['pf2name'], 0666);
  1022.         }
  1023.  
  1024.         vbseo_log_entry("[create sitemap file] filename: $sm_filename, number of urls: $vbseo_stat[urls_no]", true);
  1025.  
  1026.         if($vboptions['vbseo_sm_txt'])
  1027.         {
  1028.             vbseo_log_entry("[create sitemap in text format] part #".$vbseo_vars['txt_started'], true);
  1029.         }
  1030.  
  1031.  
  1032.         $vbseo_vars['sitemap_files'][] = array(
  1033.             'url'=>vbseo_sitemap_furl($sm_filename),
  1034.             'size'=>filesize($vbseo_vars['pfname']),
  1035.             'uncompsize'=>$vbseo_vars[$xs],
  1036.             'urls'=>$vbseo_stat['urls_no'],
  1037.             );
  1038.  
  1039.         $vbseo_stat['urls_no'] = 0;
  1040.         $vbseo_vars['sm_done']++;
  1041.         vbseo_save_progress();
  1042.  
  1043.         if($vbseo_vars['sm_done']==$vbseo_vars['split_generation'])
  1044.         {
  1045.             vbseo_log_entry("[split generation] STOP", true);
  1046.             exit;
  1047.         }
  1048.        
  1049.  
  1050.         if(!$last)
  1051.             sleep($vboptions['vbseo_sm_delay']);
  1052.  
  1053.         return;
  1054.     }
  1055.  
  1056.     function vbseo_flush_index()
  1057.     {
  1058.         global $vbseo_vars, $vboptions;
  1059.  
  1060.         vbseo_flush_sitemap(true, true);
  1061.         if($vboptions['vbseo_sm_txt'])
  1062.         {
  1063.             $vbseo_vars['txt']['size'] = @filesize($vbseo_vars['pf2name']);
  1064.         }
  1065.  
  1066.         $sm_filename = vbseo_ext_gz('sitemap_index.xml');
  1067.  
  1068.         $smaps = '';
  1069.         foreach($vbseo_vars['sitemap_files'] as $smfile)
  1070.             $smaps.="<sitemap>
  1071.     <loc>".$smfile['url']."</loc>
  1072.     <lastmod>".date('Y-m-d\TH:i:s+00:00')."</lastmod>
  1073. </sitemap>\n";
  1074.  
  1075.         $smcontent =
  1076. '<?xml version="1.0" encoding="UTF-8"?>
  1077. <sitemapindex
  1078.      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  1079.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  1080.      xsi:schemaLocation="
  1081.            http://www.sitemaps.org/schemas/sitemap/0.9
  1082.            http://www.sitemaps.org/schemas/sitemap/09/siteindex.xsd">
  1083. '.$smaps.'
  1084. </sitemapindex>';//<?php
  1085.  
  1086.         vbseo_write_file(VBSEO_DAT_FOLDER . $sm_filename, $smcontent);
  1087.         vbseo_gz_compress(VBSEO_DAT_FOLDER . $sm_filename);
  1088.         vbseo_log_entry("[create sitemap index] filename: $sm_filename, number of sitemaps: ".count($vbseo_vars['sitemap_files']), true);
  1089.  
  1090.         if($vboptions['vbseo_sm_txt'])
  1091.         vbseo_gz_compress($vbseo_vars['pf2name']);
  1092.         return;
  1093.     }
  1094.  
  1095.     function vbseo_sitemap_ping_url($url)
  1096.     {
  1097.         global $vbseo_stat;
  1098.         $purl = 'http://www.google.com/webmasters/tools/ping?sitemap='.urlencode($url);
  1099.         $rping = vbseo_query_http($purl);
  1100.         $vbseo_stat['ping'] = strstr($rping, 'Received');
  1101.  
  1102.         //$purl = 'http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap='.urlencode($url);
  1103.         $purl = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid='.VBSEO_YAHOO_APPID.'&url='.urlencode($url);
  1104.  
  1105.         $rping = vbseo_query_http($purl);
  1106.         $vbseo_stat['pingyahoo'] = strstr($rping, 'successfully');
  1107.  
  1108.         $purl = 'http://submissions.ask.com/ping?sitemap='.urlencode($url);
  1109.         $rping = vbseo_query_http($purl);
  1110.         $vbseo_stat['pingask'] = strstr($rping, 'successful');
  1111.  
  1112.         $purl = 'http://api.moreover.com/ping?u='.urlencode($url);
  1113.         $rping = vbseo_query_http($purl);
  1114.         $vbseo_stat['pingmore'] = strstr($rping, 'Thank you');
  1115.  
  1116.         $purl = 'http://webmaster.live.com/webmaster/ping.aspx?siteMap='.urlencode($url);
  1117.         $rping = vbseo_query_http($purl);
  1118.         $vbseo_stat['pinglive'] = strstr($rping, 'Thanks for');
  1119.  
  1120.         return ;
  1121.     }
  1122.  
  1123.     function vbseo_sitemap_furl($sitemap)
  1124.     {
  1125.         global $vbseo_vars, $vboptions;
  1126.  
  1127.                
  1128.         return $vbseo_vars['topurl'] . '/' . ($vboptions['vbseo_sm_norwurl'] ? 'vbseo_sitemap_file.php?sitemap=':'') . $sitemap;
  1129.     }
  1130.  
  1131.     function vbseo_sitemap_ping()
  1132.     {  
  1133.         global $vbseo_vars;
  1134.  
  1135.         $smindex = vbseo_sitemap_furl('sitemap_index.xml.gz');
  1136.         return vbseo_sitemap_ping_url($smindex);
  1137.     }
  1138.  
  1139.     function vbseo_sitemap_stat($stat, $email)
  1140.     {
  1141.         global $vbseo_vars, $vboptions;
  1142.  
  1143.         $stat['txt'] = $vbseo_vars['txt'];
  1144.  
  1145.         $logfname = VBSEO_DAT_FOLDER . time() . '.log';
  1146.         $pf = fopen($logfname, 'w');
  1147.         fwrite($pf, serialize($stat));
  1148.         fclose($pf);
  1149.         @chmod($logfname, 0666);
  1150.  
  1151.         if(!$email) return;
  1152.  
  1153.  
  1154.         $mailbody =
  1155. "Hello!
  1156.  
  1157. The vBSEO Google/Yahoo Sitemap has been successfully generated for your vBulletin forums at:
  1158. $vboptions[bbtitle] ($vbseo_vars[bburl])
  1159.  
  1160. Report:
  1161. ============================
  1162. Click the following link for your vBSEO Google/Yahoo Sitemap Report:
  1163. $vbseo_vars[bburl]/vbseo_sitemap/
  1164.  
  1165. Summary:
  1166. ============================
  1167. Forum Display: ".$stat['f']."
  1168. Show Thread: ".$stat['t']."
  1169. Show Post: ".$stat['p']."
  1170. Member Profiles: ".$stat['m']."
  1171. Poll Results: ".$stat['poll']."
  1172. Blog Entries: ".$stat['blog']."
  1173. Blog Tags: ".$stat['blogtag']."
  1174. Album URLs: ".$stat['a']."
  1175. Social Groups URLs: ".$stat['g']."
  1176. Tag URLs: ".$stat['tag']."
  1177. Archive: ".($stat['af']+$stat['at'])."
  1178.  
  1179. Total Indexed URLs: ".$stat['urls_no_tot']."
  1180. Total Processing Time: ".number_format($stat['end']-$stat['start'],2)." seconds
  1181.  
  1182. Google ping: ".(isset($stat['ping'])?($stat['ping']?'Successful':'FAILED'):'Disabled').".
  1183. Yahoo ping: ".(isset($stat['pingyahoo'])?($stat['pingyahoo']?'Successful':'FAILED'):'Disabled').".
  1184. Ask ping: ".(isset($stat['pingask'])?($stat['pingask']?'Successful':'FAILED'):'Disabled').".
  1185. Moreover ping: ".(isset($stat['pingmore'])?($stat['pingmore']?'Successful':'FAILED'):'Disabled').".
  1186. Live.com ping: ".(isset($stat['pinglive'])?($stat['pinglive']?'Successful':'FAILED'):'Disabled').".
  1187.  
  1188. ============================
  1189. vBSEO(TM) c 2005-2009 Crawlability, Inc.
  1190. http://www.crawlability.com/vbseo
  1191. http://www.vbseo.com
  1192.  
  1193.  
  1194. Note for vBSEO users: This version of the sitemap generator works with vBSEO 2.4.1 up.
  1195. Please download the most recent vBSEO here: http://www.vbseo.com/downloads/
  1196. ";
  1197.  
  1198. if(!VBSEO_ON)
  1199.     $mailbody .= "
  1200.  
  1201. Find out more out vBSEO - vBulletin Search Engine Optimization
  1202. ============================
  1203.  
  1204. vBSEO is the definitive SEO enhancement for your vBulletin community forums!
  1205.  
  1206. vBSEO makes it easier for search engines to crawl more of your valuable vBulletin content faster and more often giving you higher keyword relevancy.
  1207.  
  1208. By installing vBSEO for your vBulletin forums you should expect to:
  1209.  
  1210.    * Get more of your forum pages indexed in the major search engines
  1211.    * Get your pages indexed faster
  1212.    * Improve your keyword relevancy for all pages
  1213.    * Prevent possible duplicate content penalties
  1214.  
  1215. The result of installing vBSEO you should expect is:
  1216.  
  1217.    * Higher visitor to member conversion rate (i.e. gain more new members faster)
  1218.    * Get visitors who are more highly targeted to the content you provide
  1219.    * Increase the monthly revenues earned from your forums
  1220.    * Improve your chances of achieving big-boards.com status
  1221.  
  1222. vBulletin + vBSEO
  1223. ============================
  1224. Serious forum admins choose vBSEO for increased search engine traffic!
  1225. http://www.vbseo.com/purchase/
  1226. ";
  1227.         if(function_exists('vbmail_start'))
  1228.         {
  1229.             vbmail_start();
  1230.             vbmail($email, 'vBSEO Google/Yahoo Sitemap Updated', $mailbody);
  1231.             vbmail_end();
  1232.         }else
  1233.         {
  1234.             mail($email,
  1235.             'vBSEO Google/Yahoo Sitemap Updated',
  1236.             $mailbody,
  1237.             "From: ".$email);
  1238.         }
  1239.     }
  1240.  
  1241.  
  1242. // ================================================================================
  1243. // ================================================================================
  1244. // ================================================================================
  1245.  
  1246.     function vbseo_load_progress()
  1247.     {
  1248.         global $vbseo_progress, $vbseo_stat, $vbseo_vars;
  1249.  
  1250.         $vbseo_progress = array();
  1251.         if(file_exists(VBSEO_DAT_PROGRESS))
  1252.         {
  1253.             $vbseo_progress = unserialize(implode('',file(VBSEO_DAT_PROGRESS)));
  1254.             $vbseo_stat = $vbseo_progress['stats'];
  1255.             $vbseo_vars = $vbseo_progress['vars'];
  1256.             $vbseo_vars['sm_done'] = 0;
  1257.             vbseo_log_entry("[RESUME GENERATION] step#" . $vbseo_progress['step']);
  1258.         }
  1259.     }
  1260.  
  1261.     function vbseo_save_progress()
  1262.     {
  1263.         global $vbseo_progress, $vbseo_stat, $vbseo_vars;
  1264.  
  1265.         $vbseo_progress['stats'] = $vbseo_stat;
  1266.         $vbseo_progress['vars'] = $vbseo_vars;
  1267.         $pf = fopen(VBSEO_DAT_PROGRESS,'w');
  1268.         fwrite($pf, serialize($vbseo_progress));
  1269.         fclose($pf);
  1270.         @chmod(VBSEO_DAT_PROGRESS, 0666);
  1271.     }
  1272.  
  1273.     function vbseo_clean_progress()
  1274.     {
  1275.         global $vbseo_progress;
  1276.         $vbseo_progress = array();
  1277.         unlink(VBSEO_DAT_PROGRESS);
  1278.     }
  1279.  
  1280.     function vbseo_check_progress($step)
  1281.     {
  1282.         global $vbseo_progress;
  1283.         if($vbseo_progress['step'] > $step)
  1284.             return true;
  1285.  
  1286.         if($vbseo_progress['step'] < $step)
  1287.         {
  1288.             $vbseo_progress['step2'] = $vbseo_progress['step3'] = 0;
  1289.             $vbseo_progress['step'] = $step;
  1290.         }
  1291.         return false;
  1292.     }
  1293.  
  1294.     function vbseo_url_bburl($url)
  1295.     {
  1296.         global $vbseo_vars;
  1297.         return (strstr($url, '://') ? '' : $vbseo_vars['bburl']. ($url[0]=='/' ? '' : '/')) . $url;
  1298.     }
  1299.  
  1300.     function vbseo_url_forum($forum_id, $page = 1, $archived = false, $old = false)
  1301.     {
  1302.         global $vbseo_vars;
  1303.        
  1304.         $is_vbseo = (VBSEO_ON && VBSEO_REWRITE_FORUM && !$old);
  1305.  
  1306.         if($archived)
  1307.         {
  1308.             $url = ($is_vbseo ? VBSEO_ARCHIVE_ROOT : '/archive/index.'.VBSEO_PHP_EXT.VBSEO_SLASH_METHOD) .
  1309.                 'f-'.$forum_id.($page>1?'-p-'.$page:'').'.html';
  1310.         }else
  1311.             $url = ($is_vbseo ? vbseo_forum_url($forum_id, $page) :
  1312.                 'forumdisplay.'.VBSEO_PHP_EXT.'?f='.$forum_id . ($page>1?'&amp;page='.$page:''));
  1313.  
  1314.         return vbseo_url_bburl($url);
  1315.     }
  1316.  
  1317.     function vbseo_url_blog_entry($blogrow, $old = false)
  1318.     {
  1319.         global $vbseo_vars, $g_cache;
  1320.        
  1321.         $is_vbseo = (VBSEO_ON && VBSEO_REWRITE_BLOG && !$old);
  1322.         $g_cache['blog'][$blogrow['blogid']] = $blogrow;
  1323.  
  1324.         $url =
  1325.             ($is_vbseo ?
  1326.                 vbseo_blog_url(VBSEO_URL_BLOG_ENTRY, array('b'=>$blogrow['blogid'])) :
  1327.                 'blog.'.VBSEO_PHP_EXT.'?b='.$blogrow['blogid'] );
  1328.         unset($g_cache['blog'][$blogrow['blogid']]);
  1329.         return vbseo_url_bburl($url);
  1330.     }
  1331.  
  1332.     function vbseo_url_thread($thread_row, $page = 1, $archived = false, $old = false)
  1333.     {
  1334.         global $vbseo_vars;
  1335.  
  1336.         $is_vbseo = (VBSEO_ON && VBSEO_REWRITE_THREADS && !$old);
  1337.  
  1338.         if($archived)
  1339.         {
  1340.             $url = ($is_vbseo ? VBSEO_ARCHIVE_ROOT : '/archive/index.'.VBSEO_PHP_EXT.''.VBSEO_SLASH_METHOD) .
  1341.                 't-'.$thread_row['threadid'].($page>1?'-p-'.$page:'').'.html';
  1342.         }else
  1343.             $url = ($is_vbseo ? vbseo_thread_url_row($thread_row, $page) :
  1344.             'showthread.'.VBSEO_PHP_EXT.'?t='.$thread_row['threadid'].($page>1?'&amp;page='.$page:''));
  1345.  
  1346.         return vbseo_url_bburl($url);
  1347.     }
  1348.  
  1349.     function vbseo_url_post($thread_row, $post_row, $postcount = 1, $old = false)
  1350.     {
  1351.         global $vbseo_vars;
  1352.  
  1353.         if(VBSEO_ON && VBSEO_REWRITE_SHOWPOST && !$old)
  1354.         {
  1355.             if(strstr(VBSEO_URL_POST_SHOW, '%t')||strstr(VBSEO_URL_POST_SHOW, '%f'))
  1356.             $url = vbseo_post_url_row($thread_row, $post_row, $postcount);
  1357.             else
  1358.             $url = str_replace(
  1359.                 array('%post_id%','%post_count%'),
  1360.                 array($post_row['postid'],$postcount),
  1361.                 VBSEO_URL_POST_SHOW
  1362.             );
  1363.         }else
  1364.             $url = 'showpost.'.VBSEO_PHP_EXT.'?p='.$post_row['postid'].'&amp;postcount='.$postcount;
  1365.  
  1366.         return vbseo_url_bburl($url);
  1367.     }
  1368.  
  1369.     function vbseo_url_member($userid, $username, $old = false)
  1370.     {
  1371.         global $vbseo_vars;
  1372.  
  1373.         return vbseo_url_bburl(
  1374.             ( (VBSEO_ON && VBSEO_REWRITE_MEMBERS && !$old) ? vbseo_member_url_row($userid, $username) :
  1375.              'member.'.VBSEO_PHP_EXT.'?u='.$userid)
  1376.              ) ;
  1377.     }
  1378.  
  1379.     function vbseo_url_poll($threadrow, $getpoll, $old = false)
  1380.     {
  1381.         global $vbseo_vars;
  1382.  
  1383.         return vbseo_url_bburl(
  1384.             ( (VBSEO_ON && VBSEO_REWRITE_POLLS && !$old) ? vbseo_poll_url_direct($threadrow, $getpoll) :
  1385.              'poll.'.VBSEO_PHP_EXT.'?do=showresults&amp;pollid='.$getpoll['pollid'])
  1386.              );
  1387.     }
  1388.  
  1389.     function vbseo_url_group($arow, $old = false, $format = '', $par = '')
  1390.     {
  1391.         global $vbseo_vars;
  1392.         $urlpar = $par ? array($par) : array();
  1393.         if($arow['groupid'])
  1394.             $urlpar[] = 'groupid='.$arow['groupid'];
  1395.         if($arow['pictureid'])
  1396.             $urlpar[] = 'pictureid='.$arow['pictureid'];
  1397.         if($arow['discussionid'])
  1398.             $urlpar[] = 'discussionid='.$arow['discussionid'];
  1399.         if($arow['page'])
  1400.             $urlpar[] = 'page='.$arow['page'];
  1401.  
  1402.         return vbseo_url_bburl(
  1403.             ( (VBSEO_ON && VBSEO_REWRITE_GROUPS && !$old) ?
  1404.                 (function_exists('vbseo_group_url_row') ? vbseo_group_url_row($format , $arow) : '') :
  1405.                 'group.'.VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1406.                 )
  1407.              );
  1408.     }
  1409.    
  1410.     function vbseo_url_tag($arow, $old = false, $format = '', $par = '')
  1411.     {
  1412.         global $vbseo_vars;
  1413.         if(function_exists('unhtmlspecialchars'))
  1414.             $arow['tag'] = unhtmlspecialchars($arow['tag']);
  1415.  
  1416.         $arow['tag'] = urlencode($arow['tag']);
  1417.         $urlpar = $par ? array($par) : array();
  1418.         if($arow['tag'])
  1419.             $urlpar[] = 'tag='.$arow['tag'];
  1420.         if($arow['page'])
  1421.             $urlpar[] = 'page='.$arow['page'];
  1422.  
  1423.         return vbseo_url_bburl(
  1424.             ( (VBSEO_ON && VBSEO_REWRITE_TAGS && !$old) ?
  1425.                 (function_exists('vbseo_tags_url') ? vbseo_tags_url($format , $arow) : '') :
  1426.                 'tags.'.VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1427.                 )
  1428.              );
  1429.     }
  1430.    
  1431.     function vbseo_url_blogtag($arow, $old = false, $format = '', $par = '')
  1432.     {
  1433.         global $vbseo_vars;
  1434.         if(function_exists('unhtmlspecialchars'))
  1435.             $arow['tag'] = unhtmlspecialchars($arow['tag']);
  1436.  
  1437.         $arow['tag'] = urlencode($arow['tag']);
  1438.         $urlpar = $par ? array($par) : array();
  1439.         if($arow['tag'])
  1440.             $urlpar[] = 'tag='.$arow['tag'];
  1441.         if($arow['page'])
  1442.             $urlpar[] = 'page='.$arow['page'];
  1443.  
  1444.         return vbseo_url_bburl(
  1445.             ( (VBSEO_ON && VBSEO_REWRITE_BLOGS_TAGS_ENTRY && !$old) ?
  1446.                 (function_exists('vbseo_blog_url') ? vbseo_blog_url($format , $arow) : '') :
  1447.                 ($arow['tag'] ? 'blog.' : 'blog_tag.').
  1448.                 VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1449.                 )
  1450.              );
  1451.     }
  1452.    
  1453.     function vbseo_url_album($arow, $old = false, $format = '')
  1454.     {
  1455.         global $vbseo_vars;
  1456.  
  1457.         $urlpar = array();
  1458.         if($arow['userid'])
  1459.             $urlpar[] = 'u='.$arow['userid'];
  1460.         if($arow['albumid'])
  1461.             $urlpar[] = 'albumid='.$arow['albumid'];
  1462.         if($arow['pictureid'])
  1463.             $urlpar[] = 'pictureid='.$arow['pictureid'];
  1464.         if($arow['page'])
  1465.             $urlpar[] = 'page='.$arow['page'];
  1466.  
  1467.         return vbseo_url_bburl(
  1468.             ( (VBSEO_ON && VBSEO_REWRITE_MEMBERS && !$old) ?
  1469.                 ( function_exists('vbseo_album_url_row') ? vbseo_album_url_row(
  1470.                 $format ? $format :
  1471.                 ($arow['pictureid'] ? 'VBSEO_URL_MEMBER_PICTURE' : 'VBSEO_URL_MEMBER_ALBUM'),
  1472.                 $arow):'') :
  1473.                 'album.'.VBSEO_PHP_EXT.''.($urlpar ? '?'.implode('&amp;', $urlpar):'')
  1474.                 )
  1475.              );
  1476.     }
  1477.    
  1478. // ================================================================================
  1479. // ================================================================================
  1480. // ================================================================================
  1481.  
  1482.     function vbseo_sm_priority($pset, $pval)
  1483.     {
  1484.         global $vboptions;
  1485.         list($pmin, $pmax) = explode('-', $pset);
  1486.         if(!$vboptions['vbseo_sm_priority_smart'])
  1487.             return $pmin;
  1488.  
  1489.         $pval = min(1,max($pval,0));
  1490.         $prior = $pmin + $pval * ($pmax - $pmin);
  1491.         $prior = intval($prior*10000)/10000;
  1492.         return $prior;
  1493.     }
  1494.  
  1495.     function vbseo_math_avg_weight($value, $min, $max, $avg)
  1496.     {
  1497.         if($value > $avg)
  1498.             $relp = (($max - $avg) > 0 ?
  1499.                 ($value - $avg)/($max - $avg)*0.5 : 0 ) + 0.5;
  1500.         else
  1501.             $relp = $avg > 0 ? ($avg - $value)*0.5/$avg : 0;
  1502.  
  1503.         return $relp;
  1504.     }
  1505.  
  1506.     function vbseo_dbtbl_exists($tblname)
  1507.     {
  1508.         global $db;
  1509.         $db->hide_errors();
  1510.         $supported = $db->query_first("SHOW TABLES LIKE '" . TABLE_PREFIX . $tblname . "'");
  1511.         $db->show_errors();
  1512.         return $supported ? 1 : 0;
  1513.     }
  1514.  
  1515.     function vbseo_log_entry($message, $more_important = false)
  1516.     {
  1517.         global $vbseo_vars, $vbseo_stat;
  1518.  
  1519.         if((THIS_SCRIPT!='cron') && ($vbseo_vars['log_detailed'] || $more_important) )
  1520.         {
  1521.             if (function_exists('memory_get_usage'))
  1522.                 $message.=' ['.number_format(memory_get_usage()/1024,1).'Kb mem used]';
  1523.             $tm = array_sum(explode(' ', microtime()))-$vbseo_stat['start'];
  1524.             $message .= ' ['.number_format($tm,0).'s (+'.number_format($tm-$vbseo_vars['last_tm'],0).'s)]';
  1525.             $vbseo_vars['last_tm'] = $tm;
  1526.             echo $message."<br/>\n";
  1527.             flush();
  1528.         }
  1529.     }
  1530.  
  1531.     function vbseo_write_file($filename, &$filecont, $append = false)
  1532.     {
  1533.         $pf = fopen($filename, $append?'a':'w');
  1534.         fwrite($pf, $filecont);
  1535.         fclose($pf);
  1536.         @chmod($filename, 0666);
  1537.     }
  1538.  
  1539.     function vbseo_ext_gz($filename)
  1540.     {
  1541.         return VBSEO_SM_GZFUNC ? $filename.'.gz' : $filename;
  1542.     }
  1543.  
  1544.     function vbseo_gz_compress($filename)
  1545.     {
  1546.         if(VBSEO_SM_GZFUNC && function_exists('gzopen') && file_exists($filename))
  1547.         {
  1548.             $pf = fopen($filename, 'r');
  1549.             $fcont = fread($pf, filesize($filename));
  1550.             fclose($pf);
  1551.  
  1552.             $gf = gzopen($filename, 'w');
  1553.             gzwrite($gf, $fcont);
  1554.             gzclose($gf);
  1555.         }
  1556.     }
  1557.  
  1558.     function vbseo_file_gz($filename)
  1559.     {
  1560.         if(file_exists(VBSEO_DAT_FOLDER.$filename.'.gz'))
  1561.             return $filename.'.gz';
  1562.             else
  1563.             return $filename;
  1564.     }
  1565.  
  1566.     function vbseo_sm_prune($dir)
  1567.     {    
  1568.         if(defined('VBSEO_SM_PRUNE') && VBSEO_SM_PRUNE)
  1569.         {
  1570.             $prune_limit = time() - VBSEO_SM_PRUNE * 24 * 60 * 60;
  1571.             if(is_dir($dir))
  1572.             {
  1573.                 $pd = @opendir($dir);
  1574.                 while($fn = @readdir($pd))
  1575.                 if(strstr($fn, '.log') && (filemtime($dir.$fn)< $prune_limit))
  1576.                     unlink($dir.$fn);
  1577.                 @closedir($pd);
  1578.             }else
  1579.             if(function_exists('vbseo_get_dllog'))
  1580.             {
  1581.                 $dl_list = vbseo_get_dllog();
  1582.                 $dl_list2 = array();
  1583.                 foreach($dl_list as $dl)
  1584.                     if($dl['time'] >= $prune_limit)
  1585.                     $dl_list2[] = $dl;
  1586.  
  1587.                 $pf = fopen(VBSEO_SM_DLDAT, 'w');
  1588.                 fwrite($pf, serialize($dl_list2));
  1589.                 fclose($pf);
  1590.             }
  1591.            
  1592.         }
  1593.     }
  1594.  
  1595.     function vbseo_query_http($url)
  1596.     {
  1597.  
  1598.         $s = @implode('', file($url));
  1599.         if(!$s)
  1600.             $s = vbseo_query_http_socket($url);
  1601.         return $s;
  1602.     }
  1603.  
  1604.     function vbseo_query_http_socket($url)
  1605.     {
  1606.         ini_set('default_socket_timeout', 5);
  1607.         $purl = parse_url($url);
  1608.         $connsocket = @fsockopen($purl['host'], 80, $errno, $errstr, 5);
  1609.         $start = 0;
  1610.         $timeout = 50;
  1611.         while($start < $timeout)
  1612.         {
  1613.             $start++;
  1614.             if ($connsocket)
  1615.             {
  1616.              $out = "GET ".$purl['path']."?".$purl['query']." HTTP/1.1\n";
  1617.              $out .= "Host: ".$purl['host']."\n";
  1618.              $out .= "Referer: http://".$purl['host']."/\n";
  1619.              $out .= "Connection: Close\n\n";
  1620.              $inp = '';
  1621.              @fwrite($connsocket, $out);
  1622.              while (!feof($connsocket)) {
  1623.                 $inp .= @fread($connsocket, 4096);
  1624.              }
  1625.              @fclose($connsocket);
  1626.              break;
  1627.             }
  1628.  
  1629.         }
  1630.         preg_match("#^(.*?)\r?\n\r?\n(.*)$#s",$inp,$hm);
  1631.         return $hm[2];
  1632.     }
  1633. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement