用PHP解析非常大的xml文件

用PHP解析非常大的xml文件,php,xml,parsing,Php,Xml,Parsing,我正在做一个PHP项目,我需要从我使用的xmlReader的URL解析一个大的XML文件(>240MB)。它可以在本地主机上工作,但不能在共享主机(BlueHost)上工作。它显示404错误 此操作是否需要专用服务器?如果是,请给我建议 顺便说一下,拆分XML文件会有所帮助吗?XMLParser是一种拉式解析器,因此在解析时不会将整个文件加载到内存中,因此拆分文件除了增加代码的复杂性之外没有任何效果。但是,如果您在脚本中保存所有解析的细节,则会占用大量内存 但是,在共享主机上运行脚本时应该会收到

我正在做一个PHP项目,我需要从我使用的xmlReader的URL解析一个大的XML文件(>240MB)。它可以在本地主机上工作,但不能在共享主机(BlueHost)上工作。它显示404错误

此操作是否需要专用服务器?如果是,请给我建议


顺便说一下,拆分XML文件会有所帮助吗?

XMLParser是一种拉式解析器,因此在解析时不会将整个文件加载到内存中,因此拆分文件除了增加代码的复杂性之外没有任何效果。但是,如果您在脚本中保存所有解析的细节,则会占用大量内存

但是,在共享主机上运行脚本时应该会收到一些错误或消息,以确定问题所在。他们的PHP版本是用--enable libxml构建的吗?是否出现内存分配错误?

您可以使用SAX(Simple API for XML)解析器,这也是读取大型XML文件的最佳解决方案。 因为这不会将整个文件转储到内存中。这将防止内存耗尽问题。是的,读这么大的文件需要时间。 您可能需要检查php是否使用phpinfo()安装了libxml和libxml2模块;功能

但如果可以使用XMLReader,则效果更好,因为这会更快并节省内存使用。您可以使用memory_get_peak_usage()检查峰值内存使用情况;
并在对特定行执行操作后,逐行读取文件并从数组中取消设置行。

猜测这是与内存相关的问题(设置内存和时间执行限制)


为了它的价值。我已经使用vtd xml(java实现)成功解析了超过500MB的文件(内存占用少,速度快,可能是最快的exec.time)。

嘿,马克,谢谢你的回答,PHP版本是5.2.13,我尝试使用小xml运行脚本,效果很好。对于大文件,我添加ini_集('memory_limit','-1');并设置时间限制(0);我的代码,但仍然给404错误!!在脚本中启用错误日志记录。你需要知道为什么它在共享服务器上失败hosting@greg0ire-XMLREader是一个“拉式解析器”,因此拆分文件只会增加代码的复杂性,而不会减少解析器的内存使用。。。当然,OP的脚本对解析数据所做的操作可能会使用大量内存。您是否已尝试将脚本简化到尽可能短的程度(如果足够短,最好在此处发布),但仍会显示行为,即本例中的错误?