【问题标题】:php libreoffice shell_exec not workingphp libreoffice shell_exec 不工作
【发布时间】:2014-05-23 07:26:17
【问题描述】:

我正在尝试在 CentOS 6.5 中使用 php shell_exec.docx 文件转换为 .html

我的php代码:

 $command = "libreoffice --headless -convert-to html resume.docx 2>&1";
 $result = shell_exec($command);
 echo $result;

当我在http://localhost/converter/ 运行index.php 时,它给了我:

javaldx:找不到 Java 运行时环境!警告:无法从 javaldx /usr/lib64/libreoffice/program/soffice.bin X11 读取路径错误:无法打开显示:设置 DISPLAY 环境变量,使用 -display 选项或检查 X-Server 的权限(参见“man X" resp. "man xhost" 了解详情)`

在终端中它运行良好:

cd /var/www/html/converter/

libreoffice --healdess -convert-to html resume.docx

它在我的/var/www/html/converter/ 中创建resume.html

【问题讨论】:

    标签: php linux centos libreoffice shell-exec


    【解决方案1】:

    2件事,第一个命令是soffice --headless
    第二,我有一个类似的 javaldx 错误,它与权限有关。
    当以 root 身份执行时,它工作正常,但 php 以 www-data 执行。

    如果有人知道从 php 执行 libreoffice 的好方法,请告诉我。
    正如我收到error code 77 所说:

    [Java framework] Error in function createSettingsDocument (elements.cxx).
    javaldx failed!
    Warning: failed to read path from javaldx
    

    【讨论】:

      【解决方案2】:

      您好我有同样的问题,我想从用 PHP 创建的 DOCS 转换 PDF,我使用 OpenSuse 12.3 和 LibreOffice,尝试了很多东西,最后我检测到错误在文件夹中:

      1.-首先检查您没有在php.ini中禁用shell_exec,并且open_basedir没有限制您的访问文件夹。

      2.- 在 shell(终端)中以简单用户身份运行命令 export HOME=/tmp && soffice --headless --convert-to pdf --outdir /srv/www/htdocs/ /srv/www/htdocs/Creecimientos/sic/app/webroot/usuarios/2/8_Pagare_CreePersonas.docx

      3.- 如果它有效,您只需将正确的文件夹放入您的代码中,当我在 PHP 中运行此代码时,它会显示一个空白页面,因此我检查 apache 的 access_log 是否有任何提示:

      [Java 框架] 函数 createSettingsDocument (elements.cxx) 中的错误。 javaldx 失败! 警告:无法从 javaldx 读取路径 在抛出 'com::sun::star::uno::RuntimeException' 的实例后调用终止

      注意:我的错误是在使用 export HOME=/tmp, 我检查了根系统中的文件夹有 777 用于 tmp,但问题是 apache 无法访问它,也许搜索脚本的相对文件夹,但在测试了很多东西后,我只放置了一个允许 wwwrun HOME=/srv/www/htdocs/folder_with_777 的文件夹

      这是我的最终代码,有效..

      <?php
           function word2pdf()
              { 
              echo "Procesando";         
             $result = shell_exec('export HOME=/srv/www/htdocs/Creecimientos/sic/ && soffice --headless --convert-to pdf --outdir /srv/www/htdocs/Creecimientos/sic/ /srv/www/htdocs/Creecimientos/sic/app/webroot/usuarios/2/8_Pagare_CreePersonas.docx');
             echo $result;
              }
      
              word2pdf();
      ?>
      

      实际上,它会打印:使用 writer_pdf_Export 转换 srv/www/htdocs/Creecimientos/sic/app/webroot/usuarios/2/8_Pagare_CreePersonas.docx -> /srv/www/htdocs/Creecimientos/sic//8_Pagare_CreePersonas.pdf , 成功后。

      我之前在绝望模式下进行了其他更改,但都没有解决问题,尝试将所有者更改为 soffice,发现它是 ww $ ls -l $(which libreoffice),尝试使用 777 等。

      【讨论】:

        【解决方案3】:

        我没有足够的声誉来评论 TD_Nijboer 的答案,但他的具体问题的答案似乎是 soffice 需要能够在某处读取和写入配置信息。它首先尝试这样做的是~/.config 中的libreoffice 目录('~' 表示“当前用户的主目录”)。

        在 Debian 中,默认情况下,www-data 用户拥有主目录 /var/www,并且没有那里的写权限。

        如果您确保它有权创建~/.config 本身或在现有~/.config 中创建libreoffice,我希望它会起作用。

        【讨论】:

          【解决方案4】:

          运行 LibreOffice 的用户很可能没有可写的主目录,因此 LibreOffice 无法创建其配置目录,然后无法创建其配置文件,然后无法加载 Java,因为它无法写入默认配置.我知道有点傻。

          尝试添加这个参数:-env:UserInstallation=file:///tmp/whateverhere

          【讨论】:

          • 这样工作得很好 - 有完全相同的概率!
          【解决方案5】:
          /* This command will work on centos 6 /7 with installation of libreoffice headless package */
          First install package on centos as : 
          yum install libreoffice-headless
          
          /* following code work to extract text format from */  
          <?php  
           $result = exec("export HOME=/tmp/ && /usr/bin/libreoffice --headless   --convert-to txt:Text --outdir /tmp filePath");   
           var_dump($result); 
          ?>
          

          【讨论】:

            猜你喜欢
            • 2013-05-27
            • 2010-11-09
            • 2013-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多