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