10

我在笔记本电脑上设置了一个 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 运行得很好。但是当通过网络浏览器访问时,输出只是空的,并且没有按预期进行转换。

Apache 错误日志显示以下几行:

[Java 框架] 函数 createSettingsDocument (elements.cxx) 出错。
javaldx 失败!
警告:无法从 javaldx 读取路径

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

我正在使用 OpenJDK 7。

有人对如何使这项工作有任何想法吗?

4

5 回答 5

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所以你需要确定。

于 2015-02-27T10:00:08.103 回答
6

弗雷伯的回答为我解决了问题!

用过的:

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

libreoffice 然后在 php 脚本目录中创建了 '.config' 和 'libreoffice' 目录。显然它必须可以被 webserver 进程写入。

于 2016-06-06T21:00:12.717 回答
3

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

mkdir /var/www/.openoffice.org
chown www-data /var/www/.openoffice.org
于 2012-12-31T16:12:14.277 回答
1

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

于 2016-03-02T16:59:29.223 回答
0

我在 Debian 10(buster)中使用 php 文件通过 apache2 在 doc 到 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 创建转换所需的文件。

于 2020-04-18T07:17:03.160 回答