从php exec()运行libreoffice

从php exec()运行libreoffice,php,permissions,exec,libreoffice,Php,Permissions,Exec,Libreoffice,为了以编程方式转换文档(例如odt->pdf),我在带有apache的freebsd服务器上安装了libreoffice headless。它从命令行开始工作!但我的目标是能够从php实现它。这要求web用户(www)可以运行libreoffice。但它不能 当以我自己的用户身份运行libreoffice时,我得到: %libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc javaPathHelper: not

为了以编程方式转换文档(例如odt->pdf),我在带有apache的freebsd服务器上安装了libreoffice headless。它从命令行开始工作!但我的目标是能够从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用户也存在同样的问题:

sp# libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc
javaPathHelper: not found
sp#
问题是我没有从libreoffice获得任何信息,因此我不知道libreoffice为什么不想作为我自己以外的其他用户运行


我的问题是:如何给WWW用户在PHP中通过Excel()来运行LyRealSoice权限?

< P>不是一个严格的答案,而不是使用PHP的Excel,您可以考虑使用一个PHP5模块来提供对OpenOffice .org UNO编程API的访问。

< P>我遇到了同样的问题,是的(谢谢WRKKEN)在将
/usr/local/sbin
预先添加到PATH环境变量之后,我能够在apache下以www数据的形式运行libreoffice。

您看过这篇博文了吗


在运行convert命令之前,我通过一个快速的
export HOME=/tmp
解决了这个问题,这使libreoffice在某个地方可以写,从而发挥了神奇的作用。

关于,有一些“即插即用”最终用户工具,请参阅和JODConverter(和)。所有这些都可以通过PHP作为web服务或exec调用。

我将首先推荐put config path,然后运行exec()或shell_exec()

即:

$outputdir=chmod 777和libreoffice命令中的相同forlder“-outdir”

这对我很有用

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

apt-get install default-jre
首先,找到你图书馆办公室的位置

$ which libreoffice
/usr/bin/libreoffice
在路径中包括文件夹位置,并通过添加以下行设置主变量:

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

这只是一个路径问题吗?它们各自的
$PATH
中有什么内容?您通过根用户
%sudo php program.php
的命令行进行测试,作为客户端的许可?出于明显的原因,我有点偏见,但我认为这是最好的解决方案:)@nikyspag先生,请您与我分享您的代码。这非常聪明。。。你可能帮我节省了很多时间。谢谢。这为我解决了PHP的挂起转换问题,但是你能告诉我这到底是做什么的吗?为什么这能解决挂起转换问题?Libreoffice将阴影/临时/隐藏文件写入用户(运行PHP的用户,通常是apache或http或www数据)的主目录。从Web服务器(而不是从CLI)运行PHP的用户通常没有主目录,因此$home env变量将为空或未设置,并且libreoffice无法写入/。因此,显式地将其设置为tmp会给libreoffice一点空间,并允许其进行写入。嗯
putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin');
putenv('HOME=/tmp'); 
system("libreoffice .....