如何在不使用PHP加载整个内容的情况下附加到大型XML(文件)

时间:2014-02-24 19:47:56

标签: php xml file append

我为MySQL转换器模块制作了一个auto excel来构建一个基于PHP的自我目录网站。但我在自动更新站点地图时遇到了严重问题。

转换作业会在一整天内继续,Google的抓取工具可能会随时获取站点地图文件。所以每次转换成功的条目时我都会设法更新站点地图的XML文件,但每次转换用DOM或simpleXML更新大型XML文件的成本很高,因为所有数据首先加载到RAM并再次写入文件!

我决定使用“file_put_contents”加速,如下所示:

file_put_contents($xmlFile, $currentData, FILE_APPEND | LOCK_EX);

但问题是每个文件都以</urlset>结尾,删除最后一行需要使用具有相同问题的fopen()fseek,加载整个文件!

有没有办法修改文件的最后一行而不将整个内容加载到RAM或其他方式将新标记附加到XML文件而不加载整个标记?

1 个答案:

答案 0 :(得分:2)

fseek() 要求读取整个文件。只是寻找到底,以相反的顺序搜索下一个换行符并删除最后一行。

但是,为什么不使用扁平格式?像:

/sub1/page1
/sub1/page2
/sub1/sub2/page1

如果您想要附加到该文件,IMO看起来不那么苛刻。