【问题标题】:Libreoffice shell_exec failed inside PHP ScriptLibreoffice shell_exec 在 PHP 脚本中失败
【发布时间】:2019-01-23 09:12:54
【问题描述】:

我在 php 脚本中从 shell_exec 运行 libreoffice 时遇到问题。此脚本用于通过 Libreoffice 将 DOCX 转换为 HTML。该脚本在终端中运行良好,但在 Web 浏览器中运行良好。我也尝试将 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

【问题讨论】:

    标签: php shell docx libreoffice


    【解决方案1】:

    最后,我修复了它。检查 /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)

    由于缺少 LD_LIBRARY_PATH 变量,LibreOffice 找不到所需的库。设置 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)“转换/opt/lampp/htdocs/sample.docx-> /opt/lampp/htdocs/tmp/converted/sample.pdf 使用过滤器: writer_pdf_Export 覆盖: /opt/lampp/htdocs/tmp/converted//sample.pdf "

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多