繁体   English   中英

从php exec()运行libreoffice

[英]Running libreoffice from php exec()

我已经在带有apache的freebsd-server上安装了libreoffice headless,以便以编程方式转换文档(例如odt-> pdf)。 它从命令行工作! 但我的目标是能够从PHP做到这一点。 这要求web用户(www)可以运行libreoffice。 但它不能。

当我自己的用户运行libreoffice时,我得到:

%libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc
javaPathHelper: not found #This should not be a problem, says people on the net.
convert /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.doc ->
 /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.pdf using writer_pdf_Export
%

如果我尝试与root相同的命令,它不起作用。 同样是来自php的www-user的问题:

sp# libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc
javaPathHelper: not found
sp#

问题是我没有从libreoffice获得任何信息,因此我不知道为什么libreoffice不想像其他用户那样运行。

我的问题是:如何通过php中的exec()授予www-user权限来运行libreoffice?

在设置转换命令之前,我设法通过快速export HOME=/tmp解决了这个问题,这使得libreoffice可以在某个地方写入来实现它的魔力。

不是严格的答案,而是使用PUNO ,而不是使用PHP的exec,可以考虑使用PUNO ,这是一个PHP5模块,可以访问OpenOffice.org UNO编程API。

我建议先放置配置路径,然后运行exec()或shell_exec();

IE:

// Vars
putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin');
putenv('HOME=' . $outputdir); 

$ outputdir = chmod 777来自libreoffice命令的同一个forlder“--outdir”

在将/usr/local/sbin到PATH环境变量之后,我遇到了同样的问题并且是(感谢Wrikken)我能够在apache下运行libreoffice作为www-data。

关于Universal Network Objects(UNO) ,有一些“即插即用”的最终用户工具,请参阅DocvertJODConverterjODconverterpyODconverter )。 所有这些都可以被PHP称为web-service或exec。

这适合我。

确保已安装java RE,例如在ubuntu中:

apt-get install default-jre

首先,找到你的libreoffice的位置

$ which libreoffice
/usr/bin/libreoffice

在PATH中包含文件夹位置,并通过添加以下行来设置HOME var:

putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin');
putenv('HOME=/tmp'); 
system("libreoffice .....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM