Intereting Posts
Как получить доступ к ZF2-приложению без «общедоступного» URL-адреса Запрошенный URL / имя_проекта / пользователи не были найдены на этом сервере. Laravel Вставка нескольких строк в MySql с помощью одного оператора INSERT с использованием функции PHP implode Шифрование AES-256-CBC в PHP и расшифровка в Node.js PHP regex для проверки правильности URL, filter_var слишком разрешен Любой способ определить выбранный внутри тега <select>, а не на <option> Как сделать cookie с PHP PHP Сплит-строка после символов X в отдельное слово Что / Где правила именования для действий контроллера в приложении Zend_Application Как создать ответ электронной почты / метод, чтобы закодировать ответ? PHP 7 simpleXML Был запрошен псевдоним «ScnSocialAuth_ZendSessionManager», но никакая служба не найдена Как загрузить изображение с помощью ajax и просмотреть его PHP Удаленная потоковая передача файлов с поддержкой возобновления реализация google oauth2 для расширения chrome, взаимодействующего с нашими серверами

PHP Native DOMDocument и простой DOM Parser – существует ли ограничение по размеру?

Мне нужно проанализировать содержимое 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); 

Вы можете, конечно, отредактировать свою копию библиотеки и изменить эту константу.