PHP追加文本文件

问题描述:

这是我在一个网站地图文件的末尾添加新条目代码:PHP追加文本文件

$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解析器无法正常到达文件的结尾?

+2

可能重复( http://*.com/questions/4906073/a-simple-program-to-crud-node-and-node-values-of-xml-file) – Gordon

调用打开文件后添加到flock(与LOCK_EX)。这将防止由于并发而混合写入。

+0

好了,我不认为这是一个并发问题。 – Nevyan

我认为这个问题的原因很简单,就是你在$ ADD_INFO变量有

</urlset> 

它不应该包含关闭的网址设定。

此外,试图手动计数的字符,把硬编码的负数的参数,看看会发生什么。 (一些有趣的事情可能来自于此)

+0

试过相同的结果... – Nevyan

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

你可能会考虑的方式来验证您的文件指针位置或使用XML库作为在评论中提及您Q.

[一个简单的程序,以XML文件的CRUD节点和节点值]的
+0

你可以更具体的验证指针位置吗? – Nevyan

+0

作为一个快速的想法,不优雅,就在我的头顶:寻找文件的末尾,然后读取(向后)1个字节每次向尺寸$ length_end_string',直到缓冲区的'缓冲匹配'$ end_string '。 – horatio