HEX
Server: nginx/1.16.1
System: Linux iZ7xv2zauie3qihz0jlnrxZ 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: www (1000)
PHP: 7.2.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/shzthfdcpg.com/wp-content/plugins/baidusubmit/sitemap.php
<?php

/**
 * Spider will crawl this file
 */

ini_set('display_errors', 0);

define('__BAIDU_START_TIME__', microtime(true));

if (!function_exists('add_action')) {
    require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . './../../../wp-config.php';
}

set_time_limit(300);

$config = include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'inc/const.php';

require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'inc/options.php';
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'inc/sitemap.php';

if (!BaidusubmitOptions::getOption('enabled')) {
    exit;
}

if (empty($_GET['p']) || $_GET['p'] != ($sppasswd = BaidusubmitOptions::getOption('sppasswd'))) {
    BaidusubmitSitemap::headerStatus(404);
    return 1;
}

$urlsuffix = "&p=$sppasswd";

//全量索引
if ('indexall' === $_GET['m']) {
    $sitemapMaxTid = (int)BaidusubmitSitemap::getSitemapMaxEnd(BaidusubmitSitemap::TYPE_ALL); //sitemap表中最大tid
    $maxTid = BaidusubmitSitemap::getMaxTid();  //论坛数据中最大tid

    $count = $maxTid - $sitemapMaxTid;

    //新数据够生成一个sitemap时,生成新的sitemap
    if (!$sitemapMaxTid || $count >= $config['sitemapItemCount']) {
        $sitemapCount = ceil($count/$config['sitemapItemCount']);
        $next_tid = $sitemapMaxTid + 1;
        for ($i = 0; $i < $sitemapCount; $i++) {
            $start_tid = $next_tid + $i*$config['sitemapItemCount'];
            $end_tid = $start_tid + $config['sitemapItemCount'] - 1;
            $url = 'm=sitemapall&start='.$start_tid;
            BaidusubmitSitemap::addSitemap($url, BaidusubmitSitemap::TYPE_ALL, $start_tid, $end_tid);
        }
    }

    BaidusubmitSitemap::printIndexHeader();

    $site = BaidusubmitOptions::getOption('siteurl');
    $sitemapCount = BaidusubmitSitemap::getSitemapCount(BaidusubmitSitemap::TYPE_ALL);
    $sitemapUrlCount = $config['sitemapUrlCount'] > 0 ? intval($config['sitemapUrlCount']) : 50000;

    //全取出来
    if ($sitemapCount <= $sitemapUrlCount) {
        $sitemaplist = BaidusubmitSitemap::getSitemapList(BaidusubmitSitemap::TYPE_ALL, 0, $sitemapCount);
        if (count($sitemaplist) > 0) {
            BaidusubmitSitemap::printSitemapList($sitemaplist, $site, $urlsuffix);
        }
        BaidusubmitSitemap::printIndexFooter();
        BaidusubmitSitemap::setIndexLastCrawl(0);
        return 1;
    }

    //分段取
    $lastcrawl = BaidusubmitSitemap::getIndexLastCrawl();
    $time = time();

    $pasttime = $time - $lastcrawl['stime'];
    if ($pasttime < $config['sitemapStepTime']) { //没到一个时段则按上次的偏移量
        $offset = intval($lastcrawl['offset']);
    } else {
        $step = $config['sitemapStepLength'];
        if ($step > $sitemapUrlCount) {
            $step = $sitemapUrlCount;
        }
        $offset = $lastcrawl['offset'] + $step * intval($pasttime / $config['sitemapStepTime']);
    }

    if ($offset > $sitemapCount) {
        $offset = 0;
    }
    $sitemaplist = BaidusubmitSitemap::getSitemapList(BaidusubmitSitemap::TYPE_ALL, $offset, $sitemapUrlCount);

    if (count($sitemaplist) > 0) {
        BaidusubmitSitemap::printSitemapList($sitemaplist, $site, $urlsuffix);
    }

    //如果溢出了
    $overflow = $offset + $sitemapUrlCount - $sitemapCount;
    if ($overflow > 0) {
        $sitemaplist = BaidusubmitSitemap::getSitemapList(BaidusubmitSitemap::TYPE_ALL, 0, $overflow);
        if (count($sitemaplist) > 0) {
            baidu_print_sitemap_list($sitemaplist, $site, $urlsuffix);
            BaidusubmitSitemap::printSitemapList($sitemaplist, $site, $urlsuffix);
        }
    }

    BaidusubmitSitemap::printIndexFooter();
    BaidusubmitSitemap::setIndexLastCrawl($offset);
}

//增量索引
if ('indexinc' === $_GET['m']) {
    $today = strtotime(date('Y-m-d'));
    $removeTime = $today - $config['HistoryDayCount'] * 24 * 3600;  //几天前时间
    BaidusubmitSitemap::deleteIncreaseHistory($removeTime);  //删除过期数据

    $lastTime = BaidusubmitSitemap::getSitemapMaxEnd(BaidusubmitSitemap::TYPE_INC);  //sitemap表中最后时间
    if (empty($lastTime)) {
        $lastTime = $today;
    }
    if ($today >= $lastTime) {
        $url = 'm=sitemapinc&start='.$today;
        BaidusubmitSitemap::addSitemap($url, BaidusubmitSitemap::TYPE_INC, $today, $today+86399);
    }

    BaidusubmitSitemap::printIndexHeader();
    $sitemaps = BaidusubmitSitemap::getSitemapList(BaidusubmitSitemap::TYPE_INC);
    if (count($sitemaps) > 0) {   //返回增量sitemap的索引文件
        $site = BaidusubmitOptions::getOption('siteurl');
        BaidusubmitSitemap::printSitemapList($sitemaps, $site, $urlsuffix);
    }
    BaidusubmitSitemap::printIndexFooter();
}

//全量sitemap
if ('sitemapall' === $_GET['m']) {
    $start_tid = intval($_GET['start']);
    $sitemap = BaidusubmitSitemap::getSitemap(BaidusubmitSitemap::TYPE_ALL, $start_tid);
    if (empty($sitemap)) {
        BaidusubmitSitemap::headerStatus(404);
        return 1;
    }

    $end_tid = $sitemap->end;

    $pidlist = BaidusubmitSitemap::getPostIdByIdRange($start_tid, $end_tid);
    $itemCount = 0;
    $fileSize = 0;
    $urlnum = 0;
    $installmaxtid = BaidusubmitOptions::getOption('installmaxtid');

    header('Content-Type: text/xml; charset=utf-8');
    echo '<?xml version="1.0" encoding="UTF-8"?><urlset>';

    foreach ($pidlist as $pid) {
        $schema = BaidusubmitSitemap::genSchemaByPostId($pid, $post);
        $output = $schema->toXml() . "\n";
        $fileSizeCheck = $fileSize + strlen($output);
        $itemCountCheck = $itemCount + 1;

        // split sitemap file
        if ($fileSizeCheck >= 1024*1024*8 || $itemCountCheck > 5000) {
            // concurrent request
            $sp = BaidusubmitSitemap::getSitemap(BaidusubmitSitemap::TYPE_ALL, $start_tid, $end_tid);
            if ($sp) {
                $new_start_tid = $post->ID;
                $past_tid = $new_start_tid - $start_tid - 1;
                $count = ceil(($end_tid - $new_start_tid) / $past_tid);

                for ($i=0; $i<$count; $i++) {
                    $_xstart = $new_start_tid + $past_tid * $i;
                    $_xend = $_xstart + $past_tid - 1;
                    if ($_xend > $end_tid) {
                        $_xend = $end_tid;
                    }
                    $url = "m=sitemapall&start={$_xstart}";
                    BaidusubmitSitemap::addSitemap($url, BaidusubmitSitemap::TYPE_ALL, $_xstart, $_xend);
                }

                $new_end_tid = $new_start_tid - 1;
                $new_url = "m=sitemapall&start={$start_tid}";
                BaidusubmitSitemap::updateSitemap(
                        $sp->sid,
                        array('url' => $new_url, 'start' => $start_tid, 'end' => $new_end_tid));

                $end_tid = $new_end_tid;
            }
            break;
        }
        echo $output;

        $fileSize = $fileSizeCheck;
        $itemCount = $itemCountCheck;

        if ($tid <= $installmaxtid) {
            $urlnum ++;
        }

        flush();
    }
    echo '</urlset>';

    $timeLost = intval(1000 * (microtime(true) - __BAIDU_START_TIME__));
    BaidusubmitSitemap::updateSitemap(
            $sitemap->sid,
            array('item_count' => $itemCount, 'file_size' => $fileSize, 'lost_time' => $timeLost));

    BaidusubmitSitemap::updateUrlStat($urlnum);
}

//增量sitemap
if ('sitemapinc' === $_GET['m']) {
    $startTime = intval(@$_GET['start']);
    $sitemap = BaidusubmitSitemap::getSitemap(BaidusubmitSitemap::TYPE_INC, $startTime);
    if (empty($sitemap)) {
        BaidusubmitSitemap::headerStatus(404);
        return 1;
    }
    $endTime = $sitemap->end;

    define('_BAIDU_MAX_POST_COUNT_', 5000);
    $pidlist = BaidusubmitSitemap::getPostIdByTimeRange($startTime, $endTime, _BAIDU_MAX_POST_COUNT_);

    $indexsplitsitemap = false;
    $postCount = count($pidlist);
    if ($postCount >= _BAIDU_MAX_POST_COUNT_) {
        $indexsplitsitemap = true;
    }
    $itemCount = 0;
    $fileSize = 0;
    $index = 0;


    header('Content-Type: text/xml; charset=utf-8');
    echo '<?xml version="1.0" encoding="UTF-8"?><urlset>';

    $sizesplitsitemap = false;
    foreach ($pidlist as $pid) {
        $schema = BaidusubmitSitemap::genSchemaByPostId($pid, $post);
        $output = $schema->toXml() . "\n";
        $fileSizeCheck = $fileSize + strlen($output);
        $itemCount += 1;

        if ($fileSizeCheck >= 1024*1024*8) {
            $sizesplitsitemap = true;
            break;
        }

        $fileSize = $fileSizeCheck;

        echo $output;
        flush();
    }
    echo '</urlset>';

    //分裂数据
    if ($sizesplitsitemap || ($indexsplitsitemap && $thread['lastpost']<$endTime)) {  //超过sitemap文件限制进行分裂
        $sp = BaidusubmitSitemap::getSitemap(BaidusubmitSitemap::TYPE_INC, $startTime, $endTime);
        if ($sp) {
            //计算裂变
            $newStartTime = strtotime($post->post_date);
            //裂变步长
            $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 = "m=sitemapinc&start={$_xstart}";
                BaidusubmitSitemap::addSitemap($url, BaidusubmitSitemap::TYPE_INC, $_xstart, $_xend);
            }
            //把最后一个加上
            $nextTime = $curTime + 1;
            BaidusubmitSitemap::addSitemap("m=sitemapinc&start={$nextTime}", BaidusubmitSitemap::TYPE_INC, $nextTime, $endTime);

            $newEndTime = $newStartTime - 1;
            $newUrl = "m=sitemapinc&start={$startTime}";
            BaidusubmitSitemap::updateSitemap(
                        $sp->sid,
                        array('url' => $newUrl, 'start' => $startTime, 'end' => $newEndTime));

            $endTime = $newEndTime;
        }
    }


    //记录相关数据
    $timeLost = intval(1000 * (microtime(true) - __BAIDU_START_TIME__));

    BaidusubmitSitemap::updateSitemap(
            $sitemap->sid,
            array('item_count' => $itemCount, 'file_size' => $fileSize, 'lost_time' => $timeLost));

    BaidusubmitSitemap::updateUrlStat($itemCount);
}