$startTime) { $startTime = $client_etag_max_time; } if ($client_etag_max_time > $endTime) { //抓取过的数据再次抓取的时候 $etag = $client_etag_max_time; header('HTTP/1.1 304 Not Modified'); header('ETag: '.$etag); return 1; } } //清掉钩子 $_G['setting']['plugins']['func'] = array(); $etag = time(); header('ETag: '.$etag); define('_MAX_THREAD_COUNT_', 5000); $threadlist = C::t('#baidusubmit#forum_thread_baidu')->get_thread_by_lastpost($startTime, $endTime, _MAX_THREAD_COUNT_); $indexsplitsitemap = false; $threadCount = count($threadlist); if ($threadCount >= _MAX_THREAD_COUNT_) { $indexsplitsitemap = true; } $itemCount = 0; $fileSize = 0; global $_G; header('Content-Type: text/xml'); echo ''; $sizesplitsitemap = false; $forumlist = baidu_get_forum_list(); foreach ($threadlist as $tid => $thread) { $output = baidu_schema_body_build($forumlist[$thread['fid']], $thread); if($output === false){ continue; } $fileSizeCheck = $fileSize + strlen($output); $itemCount += 1; if ($fileSizeCheck >= 1024*1024*8) { $sizesplitsitemap = true; break; } $fileSize = $fileSizeCheck; echo $output; flush(); } echo ''; //分裂数据 if ($sizesplitsitemap || ($indexsplitsitemap && $thread['lastpost']<$endTime)) { //超过sitemap文件限制进行分裂 $sp = baidu_get_sitemap(2, $startTime, $endTime); if ($sp) { //计算裂变 $newStartTime = $thread['lastpost']; //裂变步长 $stepLen = intval(($newStartTime - $startTime - 1) * 0.3); $curTime = time(); //只裂变到当前时间 $count = ceil(($curTime - $newStartTime) / $stepLen); for ($i=0; $i<$count; $i++) { $_xstart = $newStartTime + $stepLen * $i; $_xend = $_xstart + $stepLen - 1; if ($_xend > $curTime) { $_xend = $curTime; } $url = "sitemapinc&start={$_xstart}"; C::t('#baidusubmit#baidusubmit_sitemap')->add($url, 2, $_xstart, $_xend); } //把最后一个加上 $nextTime = $curTime + 1; C::t('#baidusubmit#baidusubmit_sitemap')->add("sitemapinc&start={$nextTime}", 2, $nextTime, $endTime); $newEndTime = $newStartTime - 1; $newUrl = "sitemapinc&start={$startTime}"; C::t('#baidusubmit#baidusubmit_sitemap')->update_by_sid( $sp['sid'], array('url' => $newUrl, 'start' => $startTime, 'end' => $newEndTime)); $endTime = $newEndTime; } } //记录相关数据 $timeLost = intval(1000 * (microtime(true) - $_G['starttime'])); C::t('#baidusubmit#baidusubmit_sitemap')->update_by_sid( $sitemap['sid'], array('item_count' => $itemCount, 'file_size' => $fileSize, 'lost_time' => $timeLost)); baidu_update_url_stat($itemCount);