Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DOMDocument::在PHP5中加载_Php_Xml_Memory Leaks_Loops - Fatal编程技术网

DOMDocument::在PHP5中加载

DOMDocument::在PHP5中加载,php,xml,memory-leaks,loops,Php,Xml,Memory Leaks,Loops,我在脚本中以不同的函数多次打开10MB+XML文件: $dom = DOMDocument::load( $file ) or die('couldnt open'); 1) 以上是加载文档的旧样式吗 我使用的是PHP5。反对它 静态地 2) 如果可能,是否需要关闭XML文件的加载 我怀疑这会导致内存问题,因为我在XML文件的节点中循环了数千次,有时我的脚本会突然结束 感谢大家使用DOM解析器提供的帮助,整个XML文档都加载到内存中,这可能会导致处理大型文档时出现问题(我知道,您可能没有太多选

我在脚本中以不同的函数多次打开10MB+XML文件:

$dom = DOMDocument::load( $file ) or die('couldnt open');
1) 以上是加载文档的旧样式吗

我使用的是PHP5。反对它 静态地

2) 如果可能,是否需要关闭XML文件的加载

我怀疑这会导致内存问题,因为我在XML文件的节点中循环了数千次,有时我的脚本会突然结束


感谢大家使用DOM解析器提供的帮助,整个XML文档都加载到内存中,这可能会导致处理大型文档时出现问题(我知道,您可能没有太多选择)

首先,我会尽量避免多次打开同一文档:

  • 这意味着PHP需要做更多的工作:它必须多次解析一个大文档,每次都要在内存中构建DOM树
  • 它可能需要更多内存——理论上,当离开实例化
    DOMDocument
    对象的函数时,应该调用它的析构函数,释放内存,但是,谁知道呢

关于“上面是加载文档的旧样式吗”,那么,看看文档,它似乎可以动态调用(参见示例)和静态调用(参见返回值部分);所以,我认为这两种解决方案都是可以的,没有“老办法”也没有“新办法”


你说“我的剧本突然结束”是什么意思?关于
内存限制
,您是否有致命错误


如果是,如果您可以更改这种配置设置,那么将其设置为更高的值可能会有所帮助。

使用DOM解析器,整个XML文档都加载到内存中,这可能会导致在处理大型文档时出现问题(我知道,您可能没有太多选择)

首先,我会尽量避免多次打开同一文档:

  • 这意味着PHP需要做更多的工作:它必须多次解析一个大文档,每次都要在内存中构建DOM树
  • 它可能需要更多内存——理论上,当离开实例化
    DOMDocument
    对象的函数时,应该调用它的析构函数,释放内存,但是,谁知道呢

关于“上面是加载文档的旧样式吗”,那么,看看文档,它似乎可以动态调用(参见示例)和静态调用(参见返回值部分);所以,我认为这两种解决方案都是可以的,没有“老办法”也没有“新办法”


你说“我的剧本突然结束”是什么意思?关于
内存限制
,您是否有致命错误


如果是,如果您可以更改这种配置设置,那么将其设置为更高的值可能会有所帮助。

文档中存在令人担忧的内存泄漏。当我解析巨大的xml文件(90MB)时,我使用逐行读取文件并用正则表达式解析它。我知道这很难看,但它在没有内存的情况下工作。

文档中存在令人担忧的内存泄漏。当我解析巨大的xml文件(90MB)时,我使用逐行读取文件并用正则表达式解析它。我知道它很难看,但它在没有内存的情况下工作。

谢谢你提供的信息!剧本就这样消失了,没有警告,什么都没有。在apache中,它只是在httpd.exe进程达到250MB的RAM使用量后关闭子进程。我认为这是内存泄漏,我需要关闭加载的文档。只使用unset()可以吗?好吧,你可以试试(PHP处理内存的方式并不总是像你所希望的那样好),但我不确定它会有多大帮助:10 MB的XML意味着一个大文档,加载起来并不那么容易:-(谢谢Pascal-我会试试。:@Abs:我还试图解析大于250 MB的XML文件。有没有办法提高这250个上限?谢谢你的信息!剧本就这样消失了,没有警告,什么都没有。在apache中,它只是在httpd.exe进程达到250MB的RAM使用量后关闭子进程。我认为这是内存泄漏,我需要关闭加载的文档。只使用unset()可以吗?好吧,你可以试试(PHP处理内存的方式并不总是像你所希望的那样好),但我不确定它会有多大帮助:10 MB的XML意味着一个大文档,加载起来并不那么容易:-(谢谢Pascal-我会试试。:@Abs:我还试图解析大于250 MB的XML文件。有没有办法提高这个250英镑的限额?