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

Gau*_*ngh 10 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);
Run Code Online (Sandbox Code Playgroud)

所以,问题是当我在终端上运行上面的代码时,php运行完美.但是当通过Web浏览器访问时,输出只是空的,并且没有按预期进行转换.

Apache错误日志显示以下行:

[Java framework]函数createSettingsDocument(elements.cxx)中的错误.
javaldx失败了!
警告:无法从javaldx读取路径

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

我正在使用OpenJDK 7.

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

小智 7

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

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

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

这是你(或至少我)让它工作的方式:

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

在我的服务器上,所需的目录实际上是/ var/www/libreoffice,而在我的桌面计算机中,目录将是/var/www/.config/libreoffice,因此您需要确保.


小智 5

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

用过的:

$cmd = 'HOME='.getCWD().' && export HOME && libreoffice --headless ....';
exec($cmd);
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*win 3

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

mkdir /var/www/.openoffice.org
chown www-data /var/www/.openoffice.org
Run Code Online (Sandbox Code Playgroud)