【问题标题】:How to creating multiple Sitemaps in PHP in this code如何在此代码中在 PHP 中创建多个站点地图
【发布时间】:2022-01-26 00:35:34
【问题描述】:

以下代码为站点地图生成 URL。在 50,000 个 url 之后,以下代码将不会制作新的站点地图(即 sitemap2.xml 或 sitemap3.xml)

header('Content-type: application/xml; charset="ISO-8859-1"', true);
$dataAll1 = scandir('cache-data');
unset($dataAll1[0]);
unset($dataAll1[1]);
unset($dataAll1[2]);
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>
           <urlset xmlns="'.PROTOCOL.'://www.sitemaps.org/schemas/sitemap/0.9">';

$sitemap .= '<url>
                        <loc>' . SITE_HOST . '</loc>
                        <priority>1.0</priority>
                     </url>';

foreach($dataAll1 as $val){
    $data = json_decode(file_get_contents('cache-data/'.$val),1);
    if($val=='index.php'){
        continue;
    }
    $sitemap .= '<url>
                   <loc>'.SITE_HOST . '/blog/' . $data['jk'].'jktk'.$data['tk'] . '-' . $service->slugify($data['title']).'</loc>
                        <priority>0.9</priority>
                        <changefreq>daily</changefreq>
                     </url>';
}

$sitemap.='</urlset>';
echo $sitemap;

需要对上面的代码进行哪些更正,以便在达到 50,000 个 URL 后创建新的站点地图?

【问题讨论】:

  • 您必须动态创建站点地图。这样它就可以解决您的问题。你可以做一个柜台。当计数器达到 50k 时,您将创建另一个站点地图文件。您可以将内容推送到该文件中
  • 如何在上面的php代码中应用?你能帮忙吗?

标签: php web sitemap


【解决方案1】:

将 xml 生成代码分离成它自己的函数,如下所示:

function createSiteMap($data) {
    $sitemap = '<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="'.PROTOCOL.'://www.sitemaps.org/schemas/sitemap/0.9">\n';
    $sitemap .= '\t<url>\n\t\t<loc>' . SITE_HOST . '</loc>\n\t\t<priority>1.0</priority>\n\t</url>\n';
    foreach($data as $val) {
        $data = json_decode(file_get_contents('cache-data/'.$val),1);
        if($val=='index.php') continue;
        $sitemap .= '\t<url>\n';
        $sitemap .= '\t\t<loc>'.SITE_HOST . '/blog/' . $data['jk'].'jktk'.$data['tk'] . '-' . $service->slugify($data['title']).'</loc>\n';
        $sitemap .= '\t\t<priority>0.9</priority>\n';
        $sitemap .= '\t\t<changefreq>daily</changefreq>\n';
        $sitemap .= '\t</url>\n';
    }
    $sitemap.='</urlset>\n';

    return $sitemap
}

然后你可以遍历你的数组并按照你喜欢的方式对其进行切片:

$dataAll1 = scandir('cache-data');
unset($dataAll1[0]);
unset($dataAll1[1]);
unset($dataAll1[2]);

for ($i = 0; $i < $dataAll1; $i = $i + 50000) {
    $partial = array_slice($dataAll1, $i, 50000); // What if there isn't 50,000 elements left in the array?
    $result = createSiteMap($partial);
}

【讨论】:

    【解决方案2】:

    这可能有助于解决您的问题。请看下面的代码:

    define('PROTOCOL', 'url');
    $sitemapStart = '<?xml version="1.0" encoding="UTF-8"?>
               <urlset xmlns="'.PROTOCOL.'://www.sitemaps.org/schemas/sitemap/0.9">';
    
    $sitemapEnd ='</urlset>';
    
    $maxLength= 30;
    $fileName = 'sitemap';$filenameInc = 0;
    $inc = 0;
    $sitemapList = '';
    for ($i=1; $i <= 100; $i++) 
    {     
        $sitemapList .= '
    <url>
    <loc>URL</loc>
    <priority>0.9</priority>
    <changefreq>daily</changefreq>
    </url>';
        # code...
        if ($maxLength == $inc || $i == 100)
        {
            $fileName = "sitemap";
            if ($filenameInc > 0)
            {
                $fileName .= $filenameInc;
            }
            $fileName .= ".php";
            $sitemap = $sitemapStart . $sitemapList .$sitemapEnd;
           // echo  $sitemap;
            if(!file_put_contents($fileName, $sitemap))
            {
                // overwriting the file failed (permission problem maybe), debug or log here
            }
            $inc = 0;
            $filenameInc++;
            $sitemapList = '';
        }
        else {
            $inc++;
        }    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2014-11-02
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多