gpt4 book ai didi

php - 如何使用 PHP Curl 解析 xml 站点地图并单独加载每个 url

转载 作者:可可西里 更新时间:2023-11-01 13:09:43 26 4
gpt4 key购买 nike

我正在尝试编写一个脚本来读取远程 sitemap.xml 并解析其中的 url,然后依次加载每个以预缓存它们以加快浏览速度。

这背后的原因:我们正在开发的系统将 DITA XML 即时写入浏览器,第一次加载页面时,等待时间可能在 8 到 10 秒之间。之后的后续加载可能只有 1 秒。显然,为了更好的用户体验,预缓存页面是一个额外的好处。

每次我们在此服务器上准备新发布或执行任何测试/修补时,我们都必须清除缓存,因此我们的想法是编写一个脚本来解析站点地图并加载每个 url。

经过一些阅读后,我决定最好的方法是使用 PHP 和 Curl。我不知道这是否是个好主意。我更熟悉 Perl,但目前系统上既没有安装 PHP 也没有安装 Perl,所以我认为将我的脚趾浸入 PHP 池中可能会很好。

到目前为止,我从“互联网”获取的代码读取 sitemap.xml 并将其写入我们服务器上的 xml 文件,并在浏览器中显示。据我所知,这只是一次转储整个文件吗?

<?php
$ver = "Sitemap Parser version 0.2";
echo "<p><strong>". $ver . "</strong></p>";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://ourdomain.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec ($ch);
curl_close ($ch);
if (@simplexml_load_string($xml)) {
$fp = fopen('feed.xml', 'w');
fwrite($fp, $xml);
echo $xml;
fclose($fp);
}
?>

与其将整个文档转储到文件或屏幕上,不如遍历 xml 结构并仅获取我需要的 url。

xml格式如下:

<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&#x9;http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4</loc>
<lastmod>2011-03-31T11:25:01.984+01:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_9</loc>
<lastmod>2011-03-31T11:25:04.734+01:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>

我试过使用 SimpleXML:

curl_setopt($ch, CURLOPT_URL, 'http://onlineservices.letterpart.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);

$xml = new SimpleXMLElement($data);
$url = $xml->url->loc;
echo $url;

这会将第一个 url 打印到屏幕上,这是个好消息!

http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4

我的下一步是尝试阅读文档中的所有位置,所以我尝试了:

foreach ($xml->url) {
$url = $xml->url->loc;
echo $url;
}

希望这会捕获 url 中的每个位置,但它什么也没产生,我被困在这里。

请有人指导我获取多个 parent 的 child ,然后加载此页面并缓存它的最佳方式,我假设这是一个简单的 GET?

我希望我提供了足够的信息。如果我遗漏了什么(除了实际编写 PHP 的能力。请说 ;-)

谢谢。

最佳答案

您似乎没有任何值(value)来保存 foreach 的结果:

foreach ($xml->url as $url_list) {
$url = $url_list->loc;
echo $url;
}

关于php - 如何使用 PHP Curl 解析 xml 站点地图并单独加载每个 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5977212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com