Блог разработчика 1С-Битрикс

Как настроить извлечение текста из файлов в модуле SenDev: Инозапрет для проверки по 168-ФЗ

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

Как настроить извлечение текста из файлов в модуле SenDev: Инозапрет для проверки по 168-ФЗ

Модуль 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 Резервный метод парсинга PDF (используется, если не доступен pdftotext).
phpMorphy PHP-библиотека – (словоформы) Морфологический анализ для расширения пользовательских исключений (учёт всех форм слова).
pdftotext Системная утилита PDF Основной метод извлечения текста из 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).

При возникновении трудностей обращайтесь к системному администратору или в службу поддержки хостинга.

Теги: 168-ФЗ, SenDev, Инозапрет, извлечение текста, PDF, DOC, DOCX, TXT, HTML, XLSX, pdftotext, antiword, catdoc, PhpSpreadsheet, Smalot PdfParser, phpMorphy, Composer, Bitrix


Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Техническая поддержка

сайтов на CMS 1C-Битрикс

от 20 000 рублей/месяц
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ