PHP DOMDocument nativo e Simple Parser DOM – existe um limite de tamanho?

Eu preciso analisar o conteúdo de um documento HTML (produzido pelo Microsoft Word). Percorrendo o DOM para obter as informações / conteúdos que eu preciso, em seguida, a saída do desejado como CSV. Apenas uma cirurgia no cérebro, eu sei.

Agora, como o PHP não é realmente o meu problema e eu tenho uma agenda apertada, eu usaria o HTML Simple HTML Parser do PHP de http://simplehtmldom.sourceforge.net/

Notei que meu script não está funcionando. Após o teste e o erro, percebi que isso é devido ao tamanho do arquivo HTML dos arquivos produzidos pelo Word (são 3MB e possuem até 30.000 linhas de HTML!). Eu suponho que existe um limite de tamanho de arquivo para o que pode ser analisado com o PHP Simple HTML DOM Parser e talvez a API DOMDocument nativa do PHP? Se este for o caso, alguém sabe o que é esse limite? Estive googling por 40 minutos agora sem sucesso.

Talvez eu deveria usar Node.js?

PHP “Native” DOMDocument Docs e sua irmãzinha SimpleXMLElement Docs não têm um limite de tamanho codificado, mas eles são limitados pela memory que você permite que o PHP use (veja Docs de limite de memory PHP ).

Além disso, você não deve assumir que carregar um arquivo XML ou HTML de 100 MB consumirá um tamanho igual de memory. Na maioria das vezes, é muito menos memory do que o tamanho do arquivo (por exemplo, um quinto ou um décimo ou mesmo, depende um pouco do XML, então você não pode simplesmente dizer o fator X aqui, em vez disso, você precisa se métricas se quiser obter informações precisas em formação).

O tamanho do arquivo que você dá na sua pergunta – 3 MB – é bastante pequeno, eu diria. Talvez não seja pequeno para um arquivo HTML na internet, mas pequeno para as extensões PHP baseadas em libxml . Você pode descobrir sobre o uso da memory em PHP ao carregar esse arquivo usando o memory_get_usage() Docs .

Se você tem realmente grandes arquivos XML – então normalmente X (HT) ML – digamos 1,5 gigabytes – analisar com DOMDocument levará muito tempo de execução. Em seguida, usar o XMLReader Docs permitirá que você analise o documento sem carregá-lo na memory (completamente). Mas não é uma bala de prata, porque você ainda tem o tempo de análise, mas você pode controlar melhor o que analisar e quais partes saltar para que você tenha mais espaço para controlar otimizações no PHP userland.


A biblioteca PHP PHP Simple HTML DOM Parser Docs também não impõe um limite de tamanho específico. No entanto, não é uma extensão binária do PHP, mas em PHP userland. Então, você precisa entender melhor o que exatamente essa biblioteca faz (veja simple_html_dom.php na revisão HEAD ). Se você rever o código, pode ver que é um analisador puramente escrito em PHP. Isso ocorre porque foi escrito originalmente para PHP 4, onde DOMDocument com DOMDocument::loadHTML ainda não existe.

Como você pode imaginar, uma extensão PHP pode gerenciar a memory muito melhor do que uma biblioteca PHP escrita em código PHP. Especialmente quando se trata de estruturas de trees que um modelo de object de documento HTML é (esta frase não é verdadeira por conta própria, no entanto, desenvolver esta memory otimizada leva muito trabalho e um bom design que nem sempre é fácil de criar nem manter).

No entanto: desde há muitos anos , não é necessário usar essa biblioteca por mais tempo . Muitos usuários do PHP não sabem disso e eles encontraram exemplos de código desatualizados usando essa biblioteca, uma vez que popular. A biblioteca PHP Simple HTML DOM Parser ainda é sugerida de vez em quando aqui no Stackoverflow.

Então, a melhor sugestão que posso dar é: a menos que você não precise escrever código compatível com PHP 4, não use essa biblioteca e não se preocupe com seus limites. Em vez disso, coloque seu código em DOMDocument::loadHTML() Docs .

PHP Simple HTML DOM Parser tem um limite de 600KB.

 define('MAX_FILE_SIZE', 600000); 

Você pode, claro, editar sua cópia da biblioteca e alterar essa constante.