Libreoffice shell_exec在PHP脚本中失败

Libreoffice shell_exec在PHP脚本中失败,php,shell,docx,libreoffice,Php,Shell,Docx,Libreoffice,我在php脚本中从shell_exec运行libreoffice时遇到问题。此脚本用于通过Libreoffice将DOCX转换为HTML。该脚本在终端中运行良好,但在web浏览器中运行不正常。我还尝试设置HOME to/tmp,但根本不工作 <?php $soffice_path = '/usr/sbin/soffice'; $path_with_perm_777 = '/opt/lampp/htdocs/tmp'; $docx_file = __DIR__ . '/sample.do

我在php脚本中从shell_exec运行libreoffice时遇到问题。此脚本用于通过Libreoffice将DOCX转换为HTML。该脚本在终端中运行良好,但在web浏览器中运行不正常。我还尝试设置HOME to/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) );
在web浏览器中输出:-

/usr/sbin/soffice
jack
/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
NULL
ls-l/opt/lampp/htdocs/
)的输出:

系统信息:

PHP 5.6.39、Manjaro Linux 18.0.2、LibreOffice 6.1.4.2


最后,我把它修好了。在检查/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) );
在Web浏览器中输出:-

字符串(175)“convert/opt/lampp/htdocs/sample.docx-> /opt/lampp/htdocs/tmp/converted/sample.pdf使用过滤器: writer\u pdf\u导出覆盖: /opt/lampp/htdocs/tmp/converted//sample.pdf“

drwxrwxrwx  2 jack jack 4096 Jan 23 13:50 tmp
$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) );