我正在尝试使用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/
。
答案 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