我为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文件而不加载整个标记?
答案 0 :(得分:2)
fseek()
不要求读取整个文件。只是寻找到底,以相反的顺序搜索下一个换行符并删除最后一行。
但是,为什么不使用扁平格式?像:
/sub1/page1
/sub1/page2
/sub1/sub2/page1
如果您想要附加到该文件,IMO看起来不那么苛刻。