使用 PHP 动态创建站点地图 [重复]

     2023-02-24     61

关键词:

【中文标题】使用 PHP 动态创建站点地图 [重复]【英文标题】:Sitemap Dynamic Creation with PHP [duplicate] 【发布时间】:2019-06-22 08:29:18 【问题描述】:

我正在尝试使用 php 生成有效的站点地图。逻辑很简单。我将所有 ^(.+)index_sitemal.xml 请求转发到 .htaccess 中的 index_sitemap.php 文件。 PHP脚本如下:

<?php 
header( "content-type: application/xml; charset=UTF-8" );
    echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
    echo '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";
    $len = 10;   // to take
    $min = 50;  // minimum
    $max = 100;  // maximum
    $range = [];
    foreach (range(0, $len - 1) as $i) 
        while(in_array($num = mt_rand($min, $max), $range));
        $range[] = $num;
        echo '<sitemap><loc>http://'.$_SERVER['SERVER_NAME'].'/sitemap/'.$num.'.xml</loc></sitemap>'."\n";
    
    echo '</sitemapindex>';
?>

在浏览器中显示良好。

图片链接 - (抱歉,信誉不佳)https://i.ibb.co/4ZmLJ1D/Screenshot-at-Jan-29-10-47-01.png

但在尝试验证 xml 时出现类型错误。

图片链接 - (对不起,信誉低)https://i.ibb.co/Ws11cBj/Screenshot-at-Jan-29-10-55-28.png

有没有办法使用 php 显示动态站点地图?

【问题讨论】:

【参考方案1】:

我之前遇到过类似的问题,但通过运行不同的 PHP 文件以使用 CRON 作业更新站点地图来解决它。

<?php
$xmlString = '<?xml version="1.0" encoding="UTF-8"?>';
$xmlString .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';

$xmlString .= '<url>';
$xmlString .= '<loc>http://example.com/</loc>';
$xmlString .= '<lastmod>'.date(DATE_ATOM,time()).'</lastmod>';
$xmlString .= '<changefreq>daily</changefreq>';
$xmlString .= '<priority>1.0</priority>';
$xmlString .= '</url>';

$xmlString .= '<url>';
$xmlString .= '<loc>http://example.com/videos/</loc>';
$xmlString .= '<lastmod>'.date(DATE_ATOM,time()).'</lastmod>';
$xmlString .= '<changefreq>daily</changefreq>';
$xmlString .= '<priority>1.0</priority>';
$xmlString .= '</url>';

$xmlString .= '<url>';
$xmlString .= '<loc>http://example.com/contact/</loc>';
$xmlString .= '<lastmod>'.date(DATE_ATOM,time()).'</lastmod>';
$xmlString .= '<changefreq>daily</changefreq>';
$xmlString .= '<priority>1.0</priority>';
$xmlString .= '</url>';

$xmlString .= '<url>';
$xmlString .= '<loc>http://example.com/blog/</loc>';
$xmlString .= '<lastmod>'.date(DATE_ATOM,time()).'</lastmod>';
$xmlString .= '<changefreq>daily</changefreq>';
$xmlString .= '<priority>1.0</priority>';
$xmlString .= '</url>';

$sql = "SELECT * FROM categories";
$stmt = DB::run($sql);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    $url = $row["url"];
    $xmlString .= '<url>';
    $xmlString .= '<loc>http://example.com/category/'.htmlentities($url).'/</loc>';
    $xmlString .= '<lastmod>'.date(DATE_ATOM,time()).'</lastmod>';
    $xmlString .= '<changefreq>daily</changefreq>';
    $xmlString .= '<priority>1.0</priority>';
    $xmlString .= '</url>';


$xmlString .= '</urlset>';

$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($xmlString);

$dom->save('../sitemap.xml');
?>

编辑

<?php

$host = 'http://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml'; 
$ch = curl_init($host);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<300)
  echo 'success';
 else 
  echo 'try again';


?>

【讨论】:

Paddy Hallihan 感谢您的回答!我需要配置 CRON 作业以先对其进行测试。但是你能告诉我这个脚本是生成静态的“../sitemap.xml”还是只显示而不保存? 您可以在浏览器中运行 PHP 文件进行测试,而无需设置 cron 作业,它应该保存 xml 文件。就我而言,我有一个包含所有脚本的 cron 文件夹,因此 XML 保存在主目录 ../sitemap.xml 中,因此您可能需要对此进行调整 实际的 XML 文件在保存时是静态的。但 CRON 作业将每小时/每天或您选择的任何时间重写它。 嗯,很奇怪,但我没有得到这个静态的 sitemap.xml。但无论如何,我明白了你的意思,并将朝着这个方向前进,谢谢。另一件事是如何显示它。我的意思是如果我保存它“$dom->save('../sitemap.xml');”那么我的 php 脚本将不会像最初计划的那样返回 xml 站点地图。 在这种情况下,我唯一能想到的就是我之前所说的使用../ 进入一个目录并确保你有能力写入这个目录。此外,当它被保存时,我不需要显示它。我知道这个名字总是一样的,所以这就是我给谷歌搜索控制台的 URL。我还有另一个脚本,然后在一个单独的 cron 作业中 ping 谷歌说嘿这是一个新的站点地图(见编辑的答案)

创建 XML 站点地图出现错误 [重复]

】创建XML站点地图出现错误[重复]【英文标题】:CreatingXMLsitemapgettingerror[duplicate]【发布时间】:2019-01-1819:08:12【问题描述】:我正在尝试为我的php脚本创建站点地图,我的代码是:$base_url="https://www.mywebsite.com/index.php?a=browse&b=... 查看详情

如何使用 mongodb、node.js、express 和 EJS 创建动态站点地图?

】如何使用mongodb、node.js、express和EJS创建动态站点地图?【英文标题】:Howtocreateadynamicsitemapwithmongodb,node.js,expressandEJS?【发布时间】:2018-09-1920:19:38【问题描述】:我正在尝试为我的网站创建一个动态站点地图,它有很多经常更... 查看详情

PHP动态文件夹创建[重复]

】PHP动态文件夹创建[重复]【英文标题】:Phpdynamicfoldercreation[duplicate]【发布时间】:2014-06-2105:34:35【问题描述】:我希望我的php/apache站点接受对不存在的文件夹的请求-当这样的请求进入时,一些php代码应该启动以创建文件夹并... 查看详情

如何使用 zend 框架创建站点地图?

】如何使用zend框架创建站点地图?【英文标题】:howtocreatesitemapusingzendframework?【发布时间】:2011-08-0620:56:00【问题描述】:我想创建站点地图。我使用zend框架。我不太了解站点地图。任何人都知道如何在zend框架中创建站点地... 查看详情

如何修复 PHP XML 站点地图编码错误

...gerror【发布时间】:2019-06-1003:06:09【问题描述】:我正在使用PHP创建XML站点地图。XML值来自数据库,并使用以下代码生成XML站点地图。header("Content-Type:application/xml;charset=utf-8");echo\'<?xmlversion="1.0"enc 查看详情

php创建一个wordpress站点地图(代码片段)

查看详情

如何使用 html5/动态站点创建 URL [关闭]

】如何使用html5/动态站点创建URL[关闭]【英文标题】:HowtocreateURLswithhtml5/dynamicsite[closed]【发布时间】:2013-01-1317:36:37【问题描述】:我正在创建一个完全jQueryHTML5的网站。内容全部由xml提要填充。这都是程序化的。由于没有任何... 查看详情

html5:为iphone创建一个动态google地图站点w/marker

ThissimpleexamplewillaccessyourGeoLocationonmobileSafariandplaceamarkerusingGoogleMaps.<!DOCTYPEhtml><htmllang="en"><head> <metahttp-equiv="content-type"conten 查看详情

如何手动创建 XML 站点地图? [复制]

...te]【发布时间】:2015-06-2422:47:20【问题描述】:如何在不使用任何插件的情况下创建xml站点地图?<?xmlversion="1.0"encoding="UTF-8"?><urlsetxmlns="http://www.sitemaps.org/schemas/sitema 查看详情

如何使用反应路由器生成站点地图

】如何使用反应路由器生成站点地图【英文标题】:Howtogeneratesitemapwithreactrouter【发布时间】:2016-08-2912:29:02【问题描述】:我试图弄清楚如何在reactJS服务器端(快速)网络应用程序中动态生成站点地图。我正在使用反应路由器... 查看详情

使用 Jquery 为 viemo 嵌入式视频创建一个站点 [重复]

】使用Jquery为viemo嵌入式视频创建一个站点[重复]【英文标题】:createastopwithJqueryforviemoembeddedvideo[duplicate]【发布时间】:2012-03-2918:45:49【问题描述】:可能重复:StopaVimeoVideowithJquery我在我的网站的英雄部分嵌入了一个视频,从... 查看详情

php使用多站点重复帖子在多站点上复制事件后更新时间信息(代码片段)

查看详情

PHP动态获取类构造函数并调用它来创建一个新实例[重复]

...问题描述】:我正在尝试从数据库中获取所有记录,然后使用每个记录中的数据实例化一个新对象:$stmt=$this->pdo->prepare(\'SELE 查看详情

React Gatsby Graph QL - 过滤站点地图的文章

...esforsitemap【发布时间】:2021-10-3116:51:03【问题描述】:我使用Flexiblocks创建了一个Gatsby博客。问题是我想专门为GoogleNews创建一个站点地图,这将不同于博客的主站点地图。对于这个站点地图,我需要过滤过去两天内发布的文章。... 查看详情

站点用的是discuz,在静态页面上使用动态参数,会造成spider多次和重复抓取

http://www.itneng.com/动态网站不可能完全伪静态化,设置伪静态之后需要屏蔽动态域名的收录即可。编辑robots.txt文件屏蔽不想收录的动态地址,如何撰写Robots文件请看:http://www.baidu.com/search/robots.html。这也是伪静态后的通用做法。... 查看详情

如何使用 JavaScript/JQuery 创建一个简单的地图 [重复]

】如何使用JavaScript/JQuery创建一个简单的地图[重复]【英文标题】:HowtocreateasimplemapusingJavaScript/JQuery[duplicate]【发布时间】:2011-05-1322:00:06【问题描述】:如何创建此Java代码的JavaScript/JQuery等效项:Mapmap=newHashMap();//Doesn\'tnothavetobe... 查看详情

使用动态键创建对象[重复]

】使用动态键创建对象[重复]【英文标题】:Creatinganobjectwithdynamickeys[duplicate]【发布时间】:2015-09-0812:42:16【问题描述】:这是一个动态构建对象的函数:functiononEntry(key,value)console.log(key)//productNameconsole.log(value)//Budweiserconstobj=key:... 查看详情

php将idx站点地图添加到yoastseo站点地图(代码片段)

查看详情