处理PHP

时间:2017-02-18 05:57:45

标签: php xml dom xml-parsing

我正在尝试使用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

0 个答案:

没有答案