для модуля «SenDev: Инозапрет 168-ФЗ (контроль иностранных слов)» (sendev.inozapret)

Модуль sendev.inozapret позволяет проверять загруженные файлы на наличие слов, отсутствующих в нормативных словарях, в соответствии с требованиями 168-ФЗ. Для корректной работы модуля необходимо, чтобы на сервере были установлены все компоненты, отвечающие за извлечение текста из файлов различных форматов. В этой статье мы подробно разберём, какие именно утилиты и библиотеки требуются, за что они отвечают, и как их правильно установить.
1. Обзор необходимых компонентов
Модуль поддерживает следующие форматы файлов: PDF, DOC, DOCX, TXT, HTML, XLSX. Для каждого из них применяется один или несколько методов извлечения текста. Все методы можно разделить на две категории:
- PHP-библиотеки – устанавливаются через Composer и работают внутри интерпретатора PHP.
- Системные утилиты – отдельные программы, которые вызываются из PHP с помощью
shell_exec.
В таблице ниже перечислены все ключевые компоненты, их назначение и статус в диагностике.
| Компонент | Тип | Форматы | Назначение |
|---|---|---|---|
| ZipArchive | PHP (встроенный) | DOCX, XLSX | Распаковка ZIP-архивов (DOCX и XLSX по сути являются ZIP-пакетами) для чтения XML. |
| PhpSpreadsheet | PHP-библиотека | XLSX | Основной метод извлечения текста из Excel-файлов. Позволяет получить содержимое ячеек и листов. |
| Smalot\PdfParser | PHP-библиотека | Резервный метод парсинга PDF (используется, если не доступен pdftotext). |
|
| phpMorphy | PHP-библиотека | – (словоформы) | Морфологический анализ для расширения пользовательских исключений (учёт всех форм слова). |
| pdftotext | Системная утилита | Основной метод извлечения текста из PDF (из пакета poppler-utils). Быстрее и надёжнее PHP-версии. | |
| antiword | Системная утилита | DOC | Извлечение текста из документов Word 97–2003 (формат .doc). |
| catdoc | Системная утилита | DOC | Альтернативная утилита для чтения .doc (используется, если antiword недоступен или не сработал). |
| shell_exec | PHP-функция | – | Необходим для вызова системных утилит. Должна быть разрешена в настройках PHP. |
Примечание: форматы TXT и HTML обрабатываются встроенными средствами PHP (file_get_contents + strip_tags), поэтому для них дополнительных компонентов не требуется.
2. Установка PHP-библиотек через Composer
Большинство PHP-зависимостей модуля управляются через Composer – стандартный менеджер пакетов для PHP. Если он ещё не установлен на сервере, его необходимо установить (обычно это делает администратор хостинга).
2.1. Подготовка
Зайдите на сервер по SSH и перейдите в корневую директорию проекта (там, где находится файл composer.json). Обычно это DOCUMENT_ROOT вашего сайта.
2.2. Добавление требуемых библиотек
В файле composer.json должны быть прописаны зависимости. Если их нет, выполните следующие команды:
composer require phpoffice/phpspreadsheet
composer require smalot/pdfparser
Эти команды скачают библиотеки PhpSpreadsheet и Smalot\PdfParser, создадут (или обновят) папку vendor/ и сгенерируют файл автозагрузки vendor/autoload.php.
Важно: модуль sendev.inozapret уже включает в свой состав phpMorphy и его словари (в папке /lib/phpmorphy/), поэтому отдельно устанавливать его не требуется.
2.3. Подключение автозагрузчика в коде страницы
Чтобы PHP «увидел» установленные библиотеки, необходимо в начале файла, отвечающего за проверку файлов, добавить подключение автозагрузчика Composer. Сделайте это сразу после подключения заголовка Битрикс:
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/local/vendor/autoload.php'; // <-- добавьте эту строку
Если ваш vendor расположен не в /local/, а в корне, укажите соответствующий путь.
3. Установка системных утилит
Системные утилиты устанавливаются на уровне операционной системы и требуют прав root или sudo. Если вы не являетесь администратором сервера, передайте приведённые ниже инструкции вашему хостинг-провайдеру или системному администратору.
3.1. pdftotext (из пакета poppler-utils)
pdftotext – основная утилита для извлечения текста из PDF. Входит в состав пакета poppler-utils.
- Ubuntu/Debian:
sudo apt update sudo apt install poppler-utils -y - CentOS/RHEL:
sudo yum install epel-release -y sudo yum install poppler-utils -y
После установки проверьте доступность:
which pdftotext
# Должен вывести /usr/bin/pdftotext
3.2. antiword
antiword – утилита для чтения документов Microsoft Word (.doc).
- Ubuntu/Debian:
sudo apt install antiword -y - CentOS/RHEL:
sudo yum install epel-release -y sudo yum install antiword -y
3.3. catdoc
catdoc – альтернативная утилита для .doc (иногда может отсутствовать в репозиториях, но рекомендуется для повышения надёжности).
- Ubuntu/Debian:
sudo apt install catdoc -y - CentOS/RHEL:
В стандартных репозиториях CentOS пакет
catdocможет отсутствовать. В таком случае можно использовать толькоantiword– его достаточно для большинства файлов. Если же необходимо иметь оба инструмента, потребуется сборка из исходников, что выходит за рамки данной статьи.
3.4. Проверка доступности утилит
После установки убедитесь, что утилиты видны в системе:
which antiword
which catdoc
Они должны вернуть пути типа /usr/bin/antiword и /usr/bin/catdoc.
3.5. Перезапуск веб-сервера
Чтобы изменения переменных окружения подхватились веб-сервером, выполните:
sudo systemctl restart nginx # или apache2
4. Диагностика для администратора (будет добавлена при обновлении для покупателей модуля)
Модуль предоставляет встроенный диагностический блок. Он показывает статус всех перечисленных компонентов.
Чтобы увидеть диагностику, откройте страницу проверки файлов и в специальном блоке отобразится таблица:
| Компонент | Статус | Примечание |
|---|---|---|
| ZipArchive | ✅…❌ | Для DOCX, XLSX (fallback) |
| PhpSpreadsheet | ✅…❌ | Для XLSX (основной) |
| Smalot\PdfParser | ✅…❌ | Для PDF (альтернатива) |
| shell_exec доступен | ✅…❌ | Необходим для вызова внешних утилит |
| pdftotext (poppler-utils) | ✅…❌ | /usr/bin/pdftotext |
| antiword | ✅…❌ | не найден / путь |
| catdoc | ✅…❌ | не найден / путь |
| Морфология (phpMorphy) | ✅…❌ | используется словарь: ru_RU |
Зелёная галочка (✅) означает, что компонент доступен и готов к работе. Красный крестик (❌) указывает на отсутствие – в этом случае соответствующий формат файла может не обрабатываться или будет использован менее надёжный резервный метод.
Обратите внимание: phpMorphy – именно он отвечает за поддержку словоформ в пользовательских исключениях.
5. Заключение
После выполнения всех шагов:
- PHP-библиотеки PhpSpreadsheet и Smalot\PdfParser будут установлены и подключены через Composer.
- Системные утилиты pdftotext, antiword (и опционально catdoc) станут доступны для вызова из PHP.
- Диагностика для администратора покажет все зелёные галочки.
Теперь модуль sendev.inozapret сможет извлекать текст из файлов любых поддерживаемых форматов (PDF, DOC, DOCX, TXT, HTML, XLSX) максимально качественно и быстро. Это обеспечит корректную проверку на соответствие 168-ФЗ и поможет избежать ложных срабатываний из-за невозможности прочитать содержимое документа.
Если после установки каких-то компонентов диагностика по-прежнему показывает красный статус, проверьте:
- Правильно ли подключён
vendor/autoload.phpв вашем скрипте. - Есть ли у пользователя, от имени которого работает PHP, права на выполнение системных утилит (обычно это пользователь
www-dataилиnginx). - Не блокирует ли функция
shell_execвphp.ini(директиваdisable_functions).
При возникновении трудностей обращайтесь к системному администратору или в службу поддержки хостинга.