无法以网络用户身份运行oowriter

时间:2012-04-16 05:19:50

标签: ubuntu openjdk webusercontrol libreoffice

我的笔记本电脑上安装了一个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 framework]函数createSettingsDocument(elements.cxx)中的错误   javaldx失败了!
  警告:无法从javaldx读取路径

我尝试过https://wiki.archlinux.org/index.php/Libreoffice#Fixing_Java_Framework_Error的解决方案。 但它没有用。

我正在使用OpenJDK 7。

有没有人知道如何使这项工作?

5 个答案:

答案 0 :(得分:7)

不能投票,不能评论(还)......所以......

蒂姆 - 欧文所说的是真的。

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

以下是您(或至少我)让它发挥作用的方式:

  1. 以普通用户身份运行libre office,并记下目录 它创造的名称。
  2. 检查服务器正在运行的用户(或正在运行的用户PHP) 因为,如果您使用的是FPM等,可能与www-data不同......)。
  3. 检查此用户的主目录设置(来自 / etc / passwd例如)
  4. 在步骤3的目录中创建步骤1中记录的目录
  5. 从步骤2向用户更改已创建目录的所有者
  6. 在我的服务器上,所需的目录实际上是 / var / www / libreoffice ,而在我的桌面计算机中,该目录将是 /var/www/.config/libreoffice 所以你需要确定。

答案 1 :(得分:4)

Fraber的回答为我解决了这个问题!

用于:

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

libreoffice然后在php脚本目录中创建了“.config”和“libreoffice”目录。显然,它必须可以通过网络服务器进程编写。

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

我从Web服务器(实际上是“NaviServer”4.99)运行“ooffice --headless --convert-to pptx filename”时出现了相同的错误消息。上述解决方案并没有解决我的问题,但他们让我走上正轨。事实证明,NaviServer将“HOME”环境变量更改为其安装目录/ usr / local / ns,以便LibreOffice尝试访问并在此目录中创建.config文件夹。我通过从Web服务器执行BASH“set”命令并检查环境变量来发现。

答案 4 :(得分:0)

我在使用Debian 10(破坏者)中的php文件thorugh apache2将文档转换为odf时遇到了这个问题。

在浏览器和apche日志中显示

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

我在/ var / log / syslog中检查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

因此,我仅创建.config目录,并使用以下命令在我的apache根目录(/ var / www)中给予适当的权限。

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

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

这将允许apache用户使用libreoffice创建所需的文件进行转换。