这是我在站点地图文件末尾添加新条目的代码:
$add_info="
<url>
$token
<lastmod>$date</lastmod>
</url>
</urlset>";
$end_string = "</urlset>";
$length_end_string = strlen($end_string);
fseek($handle, -$length_end_string, SEEK_END);
fwrite($handle, $add_info);
可以正常工作,但有时会弄乱文件的末尾,例如:
<url>
<loc>http://example.com/url1.html</loc>
<lastmod>2011-08-31</lastmod>
</url>
</url<url>
<loc>http://example.com/url2.html</loc>
<lastmod>2011-08-28</lastmod>
</url>
</urls<url>
可能是php解析器无法正确到达文件末尾的原因吗?
打开文件后,添加对flock
(带LOCK_EX
)的调用。这将防止由于并发而导致的混合写。
我认为问题的原因很简单。
</urlset>
在$add_info变量
它不应该包含urlset的闭包。
另外,尝试手动计数char并将硬编码的负数放入参数中,看看会发生什么。
对于一个正确设置的文件,这应该工作,然而,你是盲目地倒带9个字符,所以如果在文件末尾有额外的空白,这将打破。事实上,你的urlset
关闭标记被截断两种不同的方式可能是一个暗示,你的文件不符合你的期望。
您可以研究验证文件指针位置的方法,或者使用Q.