从php exec()运行libreoffice

时间:2012-01-29 21:04:08

标签: php permissions exec libreoffice

我已经在带有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?

7 个答案:

答案 0 :(得分:13)

我在运行convert命令之前设法用快速export HOME=/tmp修复了这个问题,这使得libreoffice可以在某个地方写入来实现它的魔力。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我建议先放置配置路径,然后运行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"

答案 5 :(得分:0)

关于Universal Network Objects (UNO),有一些“即插即用”的最终用户工具,请参阅Docvert JODConverter jODconverter和{{3 }})。所有这些都可以被PHP称为web服务或exec。

答案 6 :(得分:0)

这对我有用。

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

apt-get install default-jre

首先,找到您的libreoffice的位置

$ which libreoffice
/usr/bin/libreoffice

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

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