PHP追加文本到文件


PHP append text to file

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

$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.

注释中提到的xml库。