我已经编写了一些用于生成网站地图的PHP代码。在VPS问题迫使我重新安装操作系统(并更新我的VPS)之前,此代码运行良好。现在,相同的代码不会在根目录中生成所需的sitemap1.xml。
function write_xml($url,$priority = 0.7)
{
global $handle, $counter, $file_number, $filename;
if($counter == 50000)
{
$file_number++;
$counter = 0;
// Attach end of file, and close it here.
fwrite($handle,"</urlset>'n");
fclose($handle);
}
if($counter == 0)
{
// Open next file here.
$filename = "sitemap" . $file_number . ".xml";
$handle = fopen($filename,"w+");
fwrite($handle,'<?xml version="1.0" encoding="UTF-8"?>' . "'n");
fwrite($handle,'<urlset xmlns="http://www.google.com/schemas/sitemap/0.9">' . "'n");
}
if($url != "" && $url != "END")
{
fwrite($handle,"'t <url>'n");
fwrite($handle,"'t't<loc>$url</loc>'n");
fwrite($handle,"'t't<priority>$priority</priority>'n");
fwrite($handle,"'t</url>'n");
}
if($url == "")
{
fwrite($handle,"</urlset>'n");
fclose($handle);
}
// Increment counter for every URL.
$counter++;
}
?>
请帮助我理解为什么URL没有写入sitemap1.xml文件。
代码似乎运行良好。问题一定出在调用write_xml
的代码中。
只是一些小的最佳实践-而不是这个:
if($counter == 50000)
使用更安全:
if ($counter >= 50000)
根文件夹中的权限肯定有问题。在许多配置中,根文件夹属于帐户所有者,但apache进程以用户"nobody"的身份运行。这里有两个选择:
- 将站点地图创建到一个子文件夹中,该子文件夹对每个人都具有写入权限(0777),并使用htaccess中的规则将机器人指向正确的方向:
重写引擎打开重写规则^站点地图(.*).xml子文件夹/站点地图$1.xml[L]
- 作为帐户所有者,首先在根目录上创建所有xml文件,然后将其权限更改为每个人都可以写入:0666
或者,您可能希望动态生成站点地图,并通过脚本交付它们。在这种情况下,他们的url会像sitemap.xml吗?page=1,但您仍然需要在.htaccess中为其设置一个规则