Как запустить выполнение файла Excel с использованием LibreOffice в PHP под Docker?

  • 5 сентября 2023 г. 17:07
Ответы на вопрос 2
Для запуска выполнения файла Excel с использованием LibreOffice в PHP под Docker, вам понадобится настроить контейнер Docker и установить необходимые программы и пакеты. Вот пошаговая инструкция.

1. Создайте Dockerfile для создания контейнера Docker.

   ```dockerfile
   FROM php:latest
   
   # Установка необходимых пакетов для LibreOffice
   RUN apt-get update \
       && apt-get install -y libreoffice \
       && apt-get clean \
       && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
   
   # Установка расширений PHP
   RUN docker-php-ext-install mbstring zip
   
   # Установка composer
   RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
   
   # Копирование и установка приложения PHP
   COPY . /var/www/html
   WORKDIR /var/www/html
   
   # Установка зависимостей
   RUN composer install
   
   # Открытие прав для пользователей LibreOffice
   RUN chmod 777 /usr/bin/soffice
   
   EXPOSE 80
   CMD ["php", "-S", "0.0.0.0:80"]
   ```

2. Убедитесь, что у вас установлен Docker на вашем компьютере и находитесь в каталоге проекта.

3. Создайте образ Docker, выполните команду в терминале:

   ```bash
   docker build -t excel-converter .
   ```

   В результате будет создан образ Docker с названием "excel-converter".

4. Запустите контейнер Docker с помощью следующей команды:

   ```bash
   docker run -p 8080:80 -v /path/to/your/excel/files:/var/www/html/excel-files excel-converter
   ```

   - Замените "/path/to/your/excel/files" на путь к каталогу с вашими файлами Excel.
   - Опция "-p 8080:80" перенаправляет порт 8080 на порт 80 контейнера Docker.

5. После запуска контейнера Docker, ваше приложение PHP будет доступно по адресу http://localhost:8080.

6. В коде PHP вы можете использовать функции `exec` или `system` для запуска `soffice` и конвертирования файла Excel. Вот пример кода:

   ```php
   // Путь к файлам Excel
   $excelFilesPath = '/var/www/html/excel-files/';
   
   // Путь к soffice
   $sofficePath = '/usr/bin/soffice';
   
   // Имя входного файла (xlsb)
   $inputFile = 'input.xlsb';
   
   // Имя выходного файла (xlsx)
   $outputFile = 'output.xlsx';
   
   // Команда для конвертирования файла
   $convertCommand = $sofficePath . ' --headless --convert-to xlsx --outdir ' . $excelFilesPath . ' ' . $excelFilesPath . $inputFile;
   
   // Запуск команды
   exec($convertCommand);
   ```

   В этом примере `soffice` запускается с флагами `--headless` (без графического интерфейса) и `--convert-to` для конвертирования файла в формат xlsx. `--outdir` указывает выходной каталог для сохранения конвертированного файла.

7. После выполнения кода, файл "input.xlsb" будет сконвертирован в "output.xlsx" и сохранен в каталоге "/path/to/your/excel/files" на вашем хосте.

Убедитесь, что установлены все необходимые зависимости и права на запись для соответствующих каталогов и файлов. В некоторых случаях могут потребоваться дополнительные настройки, чтобы LibreOffice правильно работал с файлами Excel.
Запустите инит контейнер перед основным, чтобы установить права для outDir, необходимые для работы PHP.
Похожие вопросы