【问题标题】:unable to run oowriter as web user无法以网络用户身份运行 oowriter
【发布时间】:2012-04-27 11:35:22
【问题描述】:

我在笔记本电脑上设置了一个网络服务器。我正在构建一个通过本地网络访问的 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。

有人知道如何进行这项工作吗?

【问题讨论】:

  • 在我的例子中,设置 HOME=/tmp,目录 libreoffice 尝试访问,使它工作。 Fraber 和 ConsuLanza Informatica 有很好的方法。谢谢各位。此外,related post 中的重要答案帮助我最终弄清楚了。

标签: ubuntu openjdk webusercontrol libreoffice


【解决方案1】:

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

蒂姆-欧文说的是真的。

该错误实际上表明 函数 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 strong> 所以你需要确定。

【讨论】:

    【解决方案2】:

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

    使用:

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

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

    【讨论】:

    • 这是正确的答案 - 我已经为此努力了几个小时,试图直接使用 unoconv 和 libreoffice。
    【解决方案3】:

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

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

    【讨论】:

    • 我无法标记此答案,因为我不知道它是否有助于解决 OP 的问题,但在出现此错误时,了解在 Alfresco 4.2 中无头使用 LibreOffice 很有用尝试(和失败)预览文档时在日志中。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      我在 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 创建转换所需的文件。

      【讨论】:

        猜你喜欢
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 2016-01-25
        相关资源
        最近更新 更多