我正在尝试使用DOM编写一个脚本来处理(清理,重新格式化)HTML文件。这是我加载文件的代码:
$dom = new DOMDocument();
$dom->loadHTML($htmFName, LIBXML_PARSEHUGE);
这是我遍历文档和检查/修改节点的代码:
class DOMTraverser
{
private $node;
public function __construct(DOMNode $node)
{
$this->node = $node;
}
public function traverse(GeneralCallBack $cb, $param) {
$cb->callBefore($this->node, $param);
foreach ($this->node->childNodes as $subnode) {
if ($subnode->hasChildNodes()) {
// $trav = new DOMTraverser($subnode);
// $trav->traverse($cb, $param);
$this->traverse($cb, $param);
}
}
$cb->callAfter($this->node);
}
}
...
$trav = new DOMTraverser($dom)
$callback = new StoryDocCallback();
$trav->traverse($callback, $storyParms);
问题在foreach
函数的traverse
语句中报告:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried
to allocate 4096 bytes) in D:\D\src\inc\DOMTraverser.cl on line 17
我的输入文件很大(2.6MB,带有近15,000个标签),但远不及错误消息中提到的134MB大小。
如何在不耗尽内存的情况下处理此文件。我会在Java中做得更好吗?
旁注:"分配内存大小" 134,217,728字节似乎很多,与我系统上的6GB内存相比,它实际上相当小。也许我可以改变配置变量吗?
PHP 7.0.8