Мне нужно проанализировать содержимое HTML-документа (созданного Microsoft Word). Перемещение DOM для получения необходимой мне информации / содержимого, а затем вывод желаемого в виде CSV. Я не знаю, что делать.
Теперь, поскольку PHP на самом деле не моя вещь, и у меня плотный график, я собирался использовать PHP Simple HTML DOM Parser с http://simplehtmldom.sourceforge.net/
Я заметил, что мой скрипт не работает. После проб и ошибок я понял, что это связано с размером файла HTML-файлов, созданных Word (они 3 МБ и имеют до 30 000 строк HTML!). Я предполагаю, что существует ограничение на размер файла для того, что можно проанализировать с помощью PHP Simple HTML DOM Parser и, возможно, собственного PHP DOMDocument API? Если это так, кто-нибудь знает, что это за лимит? Я уже 40 минут работаю в поисковых системах без успеха.
Может быть, я должен просто использовать Node.js?
PHP «Родные» DOMDocument
Docs и его SimpleXMLElement
сестра SimpleXMLElement
Docs не имеют жесткого ограничения размера, но они ограничены памятью, которую вы разрешаете использовать PHP (см. Документы с ограничениями памяти PHP ).
Также вы не должны предполагать, что загрузка XML-файла или HTML-файла объемом 100 МБ будет потреблять одинаковый объем памяти. Чаще всего это гораздо меньше памяти, чем размер файла (например, пятый или десятый или даже, немного зависит от XML, поэтому вы не можете просто указать фактор X здесь, вместо этого вам нужно метриковать свою собственную, если вы хотите получить точную Информация).
Размер файла, который вы задаете в своем вопросе – 3 МБ, – довольно маленький, я бы сказал. Возможно, не маленький для HTML-файла в Интернете, но маленький для расширений PHP на основе libxml . Вы можете узнать об использовании памяти в PHP при загрузке этого файла с помощью memory_get_usage()
Docs .
Если у вас действительно большие XML-файлы, то обычно X (HT) ML – скажем, 1,5 гигабайта – разбор с DOMDocument займет много времени. Затем использование XMLReader
Docs позволит вам анализировать документ, не загружая его в память (полностью). Но это не серебряная пуля, потому что у вас все еще есть время синтаксического анализа, но вы можете лучше контролировать, что анализировать, и какие части пропускать, чтобы у вас было больше возможностей для управления оптимизацией в пользовательском пространстве PHP.
PHP-библиотека PHP Simple HTML DOM Parser Docs не накладывает ограничения на определенный размер. Однако это не двоичное расширение PHP, а в PHP userland. Поэтому вам нужно лучше понять, что именно делает эта библиотека (см. simple_html_dom.php
в редакции HEAD ). Если вы просмотрите код, вы увидите, что это синтаксический анализатор, написанный на PHP. Это связано с тем, что он был написан для PHP 4, где DOMDocument
с DOMDocument::loadHTML
еще не существовал.
Как вы можете себе представить, расширение PHP может управлять памятью намного лучше, чем библиотека PHP, написанная в PHP-коде. Особенно, когда речь идет о древовидных структурах, которые представляют собой объектную модель HTML Document (это предложение не является истинным в своем собственном смысле, однако разработка оптимизированной памяти требует большой работы и хорошего дизайна, который не всегда легко создавать и поддерживать).
Однако: Поскольку уже много лет нет необходимости использовать эту библиотеку больше . Многие пользователи PHP этого не знают, и они находят устаревшие примеры кода, используя эту некогда популярную библиотеку. Библиотека PHP Simple HTML DOM Parser даже по-прежнему предлагает время от времени здесь, в Stackoverflow.
Поэтому лучшим предложением, которое я могу дать, является следующее: если вам не нужно писать код, совместимый с PHP 4, не используйте эту библиотеку вообще и не заботитесь о ее ограничениях. Вместо этого DOMDocument::loadHTML()
свой код в DOMDocument::loadHTML()
Docs .
PHP Простой HTML DOM Parser имеет ограничение в 600 КБ.
define('MAX_FILE_SIZE', 600000);
Вы можете, конечно, отредактировать свою копию библиотеки и изменить эту константу.