PHP将文本追加到文件中

时间:2011-09-06 15:17:45

标签: php file-io sitemap

这是我在站点地图文件末尾添加新条目的代码:

$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解析器无法正确到达文件末尾吗?

3 个答案:

答案 0 :(得分:1)

打开文件后,向flock(带LOCK_EX)添加电话。这将防止由于并发而混合写入。

答案 1 :(得分:1)

我认为问题的原因只是你有

</urlset>
$ add_info变量中的

它不应该包含对urlset的关闭。

此外,尝试手动计算char并将硬编码的负数放入参数中,看看会发生什么。 (有趣的东西可能来自那个)

答案 2 :(得分:1)

使用正确设置的文件,这应该可以工作,但是,你盲目地倒带9个字符,所以如果文件末尾有额外的空格,这将会中断。您的urlset关闭代码被截断两种不同的方式这一事实可能暗示您的文件不符合您的期望。

您可能会研究验证文件指针位置的方法,或使用Q中评论中提到的xml库。