如何在不使用PHP加载整个内容的情况下附加到大型XML(文件)
我制作了一个自动excel到MySQL转换模块,以构建一个基于PHP的自目录网站。但我在自动更新网站地图时遇到了一个严重的问题 转换工作将持续一整天,谷歌的爬虫程序可以随时获取站点地图文件。因此,每次成功转换条目时,我都会设法更新sitemap的XML文件,但每次转换都要使用DOM或simpleXML更新大型XML文件,这会带来很大的成本,因为所有数据都先加载到RAM,然后再写入文件 我决定使用“文件内容”来加速,如下所示:如何在不使用PHP加载整个内容的情况下附加到大型XML(文件),php,xml,file,append,Php,Xml,File,Append,我制作了一个自动excel到MySQL转换模块,以构建一个基于PHP的自目录网站。但我在自动更新网站地图时遇到了一个严重的问题 转换工作将持续一整天,谷歌的爬虫程序可以随时获取站点地图文件。因此,每次成功转换条目时,我都会设法更新sitemap的XML文件,但每次转换都要使用DOM或simpleXML更新大型XML文件,这会带来很大的成本,因为所有数据都先加载到RAM,然后再写入文件 我决定使用“文件内容”来加速,如下所示: file_put_contents($xmlFile, $curren
file_put_contents($xmlFile, $currentData, FILE_APPEND | LOCK_EX);
但问题是每个文件都以
结尾,删除最后一行需要使用具有相同问题的fopen()
和fseek
,加载整个文件
有没有任何可能的方法可以在不将整个内容加载到RAM的情况下修改文件的最后一行,或者有没有其他方法可以在不加载整个标记的情况下将新标记附加到XML文件?fseek()
是否需要读取整个文件。只需搜索到末尾,按相反顺序搜索下一个换行符,然后删除最后一行
但是,为什么不使用展平格式呢?比如:
/sub1/page1
/sub1/page2
/sub1/sub2/page1
在我看来,如果你想附加到文件中,这看起来就不那么黑客了。thanx关于你的信息,我在url中使用了扁平格式,比如/language/page/action/params,但链接数量太多(大约500k或更高),谷歌可能无法识别所有链接。顺便问一下,删除大文件最后一行的最佳方法是什么?(技术性)