我现在有一个包含大约 300k 页的 Wordpress 站点,以及一个内存为 1GB 的服务器。不幸的是,所有的站点地图生成插件都无法处理它。我尝试了 3 种不同的使用 PHP 写入 XML 的方法(XMLWriter、SimpleXMLElement 和 DOMDocument),它们最终都达到了大约 30k 页(xml 节点)。
你认为我能做些什么来完成这项工作?最坏的情况是,我考虑过设置多个 cron 作业,每天每十分钟运行一次,并继续打开/附加到文件,然后分块添加,但这显然不是最佳解决方案。我发现了一些声称能够在我的循环期间清除内存的片段,但它也没有起到作用。这是该片段的示例:
$xml = '<?xml version="1.0" encoding="UTF-8"?><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">';
for ($i = 0 ; $i< 20; $i++) {
$query = mysql_query(sprintf("SELECT ID, post_date FROM wp_posts WHERE post_status='publish' LIMIT %s,%s", $i*10000, 10000));
while ($row = mysql_fetch_array($query)) {
$xml .= '<url>';
$xml .= '<loc>'.get_permalink($row['ID']).'</loc>';
$xml .= '<lastmod>'.$row['post_date'].'</lastmod>';
$xml .= '<changefreq>weekly</changefreq>';
$xml .= '<priority>0.6</priority>';
$xml .= '</url>';
}
}
$xml .= '</urlset>';
$sxe = new SimpleXMLElement($xml);
$sxe->asXML("sitemap.xml");