2017-10-15 46 views
0

你能帮我解决一下这个问题吗,能够解析和合并大约12个xml文件,每个文件有~5个大小,最终有一个全局文件。解析并合并很多xml文件,内存不足

目前,我使用一个cron运行脚本(一symfony框架命令)

对于每个I同捆JMSSerializerBundle反序列化文件,它允许创建从XML文件中的对象。

而且我有内存问题。我认为这是由于这种反序列化。

所以我的问题是,

  • 你知道更好的方法来做到这一点STUP,如果我用的SimpleXML解析替换此反序列化这个包,你认为它消耗更少的内存?

  • 另外,如果我将文件保存在变量中,Redis是否会更改任何内容?

  • 而且,最后一个问题,如果我使用数据库,例如,我将文件保存在一个表中,然后检索表中的所有记录,并使用它创建全局xml文件,是否可以一个好主意? 或者以几个步骤(每次3个文件)构建全局文件,每次将其保存在一个表中并每次以简单数组检索数据。

非常感谢您的帮助。

+1

如果您在使用SimpleXML时遇到内存问题,您应该切换到使用像[XMLReader](http://www.php.net/manual/en/class.xmlreader.php)这样的pull解析器。 –

+0

组合XMLReader和XMLWriter应该能够让你一次构建整个文件。这取决于您在处理数据的同时需要处理的数量,您可以一次处理它们。 –

+0

是的,我打算使用XMLReader谢谢你们。 – sakados

回答

0

如果这是通过命令行完成的任务之一,那么您可以在CLI脚本的开头使用ini_set('memory_limit', -1);将PHP的memory_limit设置为-1

这显然不是一个请求的选项,因为单个请求可能会占用整个系统的内存。另外请注意,您显然仍受可用系统内存的限制,因此您可能仍会遇到此问题。

正如在评论中已经建议的那样,您可以通过使用像这样的解析器来减少内存使用量。这将通过读取XML来减少耗尽的内存量,但显然保持读取数据(可能在数组中)仍然会累积。如果您没有使用最新的PHP版本,那么这可能是优化内存使用的最简单方法。

除此之外,我建议使用像xhprof或blackfire.io这样的工具来描述脚本的内存使用情况,并尝试修复它们指出的主要问题。

+0

感谢dbrumann对此解释:) – sakados