Ошибка libreoffice shell_exec внутри PHP-скрипта - PullRequest
0 голосов
/ 23 января 2019

У меня проблема при запуске libreoffice из shell_exec внутри сценария php.Этот скрипт предназначен для преобразования DOCX в HTML через Libreoffice.Скрипт работает хорошо в терминале, но не внутри веб-браузера.Я также пытался настроить HOME на / tmp, но не работал вообще.

<?php

$soffice_path = '/usr/sbin/soffice';
$path_with_perm_777 = '/opt/lampp/htdocs/tmp'; 
$docx_file = __DIR__ . '/sample.docx';

echo `which soffice`;
echo `whoami`;
echo shell_exec('echo ${PATH}');

$command = escapeshellcmd('export HOME="/tmp"') . " && " . escapeshellcmd($soffice_path.' --headless --convert-to pdf --outdir '. $path_with_perm_777 .'/converted/ '.$docx_file);          

var_dump( shell_exec($command) );

Вывод на терминал: -

/usr/bin/soffice
jack
${PATH}:/usr/bin/custom/:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin
string(175) "convert /opt/lampp/htdocs/sample.docx -> /opt/lampp/htdocs/tmp/converted//sample.pdf using filter : writer_pdf_Export Overwriting: /opt/lampp/htdocs/tmp/converted//sample.pdf"

Вывод в веб-браузере: -

/usr/sbin/soffice
jack
/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
NULL

Вывод (ls -l /opt/lampp/htdocs/):

drwxrwxrwx  2 jack jack 4096 Jan 23 13:50 tmp

Информация о системе:

PHP 5.6.39, Manjaro Linux 18.0.2, LibreOffice 6.1.4.2

1 Ответ

0 голосов
/ 30 января 2019

Наконец-то я исправил это.После проверки / opt / lampp / logs / error_log я получил следующие три строки: -

/ usr / lib / libreoffice / program / oosplash: /opt/lampp/lib/libstdc++.so.6: версия 'GLIBCXX_3.4.18' не найдена (требуется /usr/lib/libreoffice/program/libuno_sal.so.3)

/ usr / lib / libreoffice / program / oosplash: / opt / lampp / lib/libstdc++.so.6: версия 'GLIBCXX_3.4.11' не найдена (требуется для /usr/lib/libreoffice/program/libuno_sal.so.3)

/ usr / lib / libreoffice / program / oosplash:/opt/lampp/lib/libstdc++.so.6: версия 'CXXABI_1.3.9' не найдена (требуется для /usr/lib/libreoffice/program/libuno_sal.so.3)

LibreOffice можетне удается найти необходимые библиотеки из-за отсутствия переменной LD_LIBRARY_PATH.После настройки LD_LIBRARY_PATH LibreOffice успешно преобразовал документ DOCX в файл PDF.

$command = escapeshellcmd('export LD_LIBRARY_PATH="/usr/lib:/usr/lib32:/usr/local/lib"') . ' && ' . escapeshellcmd('export HOME="/tmp"') . ' && ' . escapeshellcmd($soffice_path.' --headless --convert-to pdf --outdir '. $path_with_perm_777 .'/converted '.$docx_file);
var_dump( shell_exec($command) );

Вывод в веб-браузере: -

string (175) "convert / opt / lampp / htdocs/sample.docx -> /opt/lampp/htdocs/tmp/converted/sample.pdf с использованием фильтра: writer_pdf_Export Перезапись: /opt/lampp/htdocs/tmp/converted//sample.pdf "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...