无法以Web用户身份运行oowriter

11

我在我的笔记本电脑上设置了一个Web服务器。我正在构建一个Web应用程序,通过本地网络访问该应用程序。 我有一个包含以下行的PHP文件:

$command = "/usr/bin/oowriter --invisible --convert-to pdf /var/www/hackathon/document/gaurav.doc -outdir /var/www/hackathon/pdf/"
exec($command, $output, $return_var);
print_r($output);

所以,问题在于当我在终端运行上述代码时,PHP可以完美运行。但是通过Web浏览器访问时,输出为空,没有进行预期的转换。
Apache错误日志显示以下行:
[Java框架] 在函数createSettingsDocument(elements.cxx)中出现错误。 Javaldx失败! 警告:无法从javaldx读取路径。
我已经尝试了https://wiki.archlinux.org/index.php/Libreoffice#Fixing_Java_Framework_Error中提供的解决方案,但它没有起作用。
我正在使用OpenJDK 7。
有人知道如何使这个工作吗?

1
在我的情况下,将HOME=/tmp设置为libreoffice尝试访问的目录使其正常工作。Fraber和ConsuLanza Informatica有很好的方法。谢谢大家。此外,这个相关帖子中的greatmatter答案帮助我最终找到了解决方法。 - mlg
5个回答

7

暂时无法投票,无法评论…所以…

Tim-Erwin说得没错。

错误实际上声明了createSettingsDocument函数中的错误,这是一个提示,说明名为createSettingsDocument(注意:创建设置文档)的某个函数失败了...

以下是您(或至少我)使其正常工作的方法:

  1. 以普通用户身份运行LibreOffice一次,并记下它创建的目录名称。
  2. 检查服务器正在运行的用户(或PHP正在运行的用户,如果您使用FPM等,则可能与www-data不同...)。
  3. 检查此用户的主目录设置是什么(例如从/etc/passwd)
  4. 在第3步中的目录中创建第1步中注意到的目录。
  5. 将创建的目录的所有者更改为第2步中的用户。

在我的服务器上,所需的目录实际上是/var/www/libreoffice,而在我的桌面机器上,该目录应为/var/www/.config/libreoffice,因此您需要确认。


6

Fraber的回答解决了我的问题!

使用:

$cmd = 'HOME='.getCWD().' && export HOME && libreoffice --headless ....';
exec($cmd);

LibreOffice随后在PHP脚本目录中创建了'.config'和'libreoffice'目录。显然,它必须可写入Web服务器进程。


1
这是正确的答案 - 我已经为此苦恼了几个小时,试图同时使用unoconv和libreoffice。 - ckm

3

OpenOffice需要一个用户目录。由于您正在尝试通过web服务器调用OpenOffice,因此您必须授予相应的用户写入访问权限。例如,在Debian上,这意味着允许www-data写入/var/www/.openoffice.org/:

mkdir /var/www/.openoffice.org
chown www-data /var/www/.openoffice.org

1
我无法将此答案标记为有用,因为我不知道它是否有助于解决OP的问题,但是在使用LibreOffice与Alfresco 4.2无头模式时,了解这一点非常有用,因为在尝试(并失败)预览文档时,日志中会出现此错误。 - Vaughany

2
我在Web服务器上运行“ooffice --headless --convert-to pptx filename”时得到了相同的错误信息(实际上是“NaviServer” 4.99)。上面的解决方案没有解决我的问题,但它们让我找对了方向。原来,NaviServer将“HOME”环境变量更改为其安装目录/usr/local/ns,因此LibreOffice尝试在该目录中访问和创建.config文件夹。我通过从Web服务器执行BASH“set”命令并检查环境变量来发现这一点。

0

我在使用Debian 10 (buster)上的apache2通过php文件进行doc到odf转换时遇到了问题。

在浏览器和apche日志中显示如下:

"Array ( [0] => javaldx failed! [1] => Warning: failed to read path from javaldx )"

我检查了位于/var/log/syslog的系统日志,并发现以下错误。这导致了Apache主目录中的某些权限和目录问题。

Apr 18 02:44:53 siptrunkbgp kernel: [744789.941286] audit: type=1400 audit(1587192293.959:70491): apparmor="ALLOWED" operation="mkdir" profile="libreoffice-oopslash" name="/var/www/.config/" pid=9835 comm="oosplash" requested_mask="c" denied_mask="c" fsuid=33 ouid=33
Apr 18 02:44:54 siptrunkbgp kernel: [744789.995119] audit: type=1400 audit(1587192294.015:70492): apparmor="ALLOWED" operation="mkdir" profile="libreoffice-soffice" name="/var/www/.config/" pid=9852 comm="soffice.bin" requested_mask="c" denied_mask="c" fsuid=33 ouid=33

所以我只需在我的Apache根目录(/var/www)中创建.config目录并使用以下命令赋予适当的权限。

mkdir -p /var/www/.config/libreoffice

chown -Rf www-data.www-data /var/www/.config/

这将允许Apache用户使用LibreOffice创建所需的转换文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接