php libreoffice shell_exec不能正常工作

时间:2014-04-09 20:50:58

标签: php linux centos libreoffice shell-exec

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

我的PHP代码:

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

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

  

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

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

5 个答案:

答案 0 :(得分:6)

嗨我有同样的问题,我想从用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 framework]函数createSettingsDocument(elements.cxx)中的错误。 javaldx失败了! 警告:无法从javaldx读取路径 在抛出'com :: sun :: star :: uno :: RuntimeException'

的实例后终止调用

注意:我的错误是在使用导出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();
?>

实际上,它打印:convert srv / www / htdocs / Creecimientos / sic / app / webroot / usuarios / 2 / 8_Pagare_CreePersonas.docx - &gt; /srv/www/htdocs/Creecimientos/sic//8_Pagare_CreePersonas.pdf使用writer_pdf_Export,成功后。

我在desesperate模式之前做了其他更改,但没有一个解决了问题,试图将所有者改为soffice,发现它是巫婆$ ls -l $(libreoffice),尝试用777等等。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

/* 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); 
?>

答案 3 :(得分:1)

我没有足够的声誉来评论TD_Nijboer的答案,但他的具体问题的答案似乎是soffice需要能够阅读&amp;在某处写配置信息。它尝试执行此操作的第一个位置是libreoffice中的~/.config目录(&#39;〜&#39;表示&#34;当前用户的主目录&#34;)

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

如果您确定它有权在现有~/.config内创建libreoffice~/.config,我希望它能够正常运作。

答案 4 :(得分:0)

2件事,第1命令是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