【问题标题】:Running libreoffice from php exec()从 php exec() 运行 libreoffice
【发布时间】:2012-02-21 19:52:45
【问题描述】:

我已经在带有 apache 的 freebsd 服务器上安装了 libreoffice headless,以便以编程方式转换文档(例如 odt->pdf)。它可以从命令行工作!但我的目标是能够从 php 中做到这一点。这要求网络用户 (www) 可以运行 libreoffice。但它不能。

当以我自己的用户身份运行 libreoffice 时,我得到:

%libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc
javaPathHelper: not found #This should not be a problem, says people on the net.
convert /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.doc ->
 /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.pdf using writer_pdf_Export
%

如果我尝试与 root 相同的命令,它不起作用。 php中的www-user也是同样的问题:

sp# libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc
javaPathHelper: not found
sp#

问题是我没有从 libreoffice 获得任何信息,因此我不知道为什么 libreoffice 不想以我自己以外的其他用户身份运行。

我的问题是:如何在 php 中通过 exec() 授予 www-user 运行 libreoffice 的权限?

【问题讨论】:

  • 只是路径问题吗?他们各自的$PATH's 中有什么?
  • 您以root用户%sudo php program.php的命令行测试,作为客户端有权限?

标签: php permissions exec libreoffice


【解决方案1】:

在运行转换命令之前,我设法通过快速export HOME=/tmp 解决了这个问题,这让 libreoffice 有一个可写的地方来工作,这很神奇。

【讨论】:

  • 这很聪明...你可能为我节省了很多时间。谢谢。
  • 这为我解决了来自 PHP 的挂起转换,但你能告诉我这到底是做什么的吗?为什么这可以解决挂起的转化?
  • Libreoffice 将影子/临时/隐藏文件写入用户(运行 PHP 的用户,通常是 apache 或 http 或 www-data)的主目录。从 web 服务器(不是从 CLI)运行 PHP 的用户通常不会有主目录,因此 $HOME 环境变量将为空或未设置,并且 libreoffice 无法写入 /。因此,将其显式设置为 tmp 可以为 libreoffice 提供一些具有写入权限的空间。 HTH
【解决方案2】:

严格来说不是答案,但您可以考虑使用PUNO,而不是使用 PHP 的 exec,这是一个提供对 OpenOffice.org UNO 编程 API 的访问的 PHP5 模块。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 出于显而易见的原因,我有点偏见,但我认为这是最好的解决方案:)
    【解决方案4】:

    这对我有用。

    确保您已安装 java RE,例如在 ubuntu 中:

    apt-get install default-jre
    

    首先,找到你的 libreoffice 的位置

    $ which libreoffice
    /usr/bin/libreoffice
    

    在 PATH 中包含文件夹位置,并通过添加以下行来设置 HOME 变量:

    putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin');
    putenv('HOME=/tmp'); 
    system("libreoffice .....
    

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,是的(感谢 Wrikken)在将 /usr/local/sbin 添加到 PATH 环境变量之后,我能够在 apache 下将 libreoffice 作为 www-data 运行。

      【讨论】:

      • @nikyspag 先生,请您与我分享您的代码。
      【解决方案6】:

      我建议你先运行 exec() 或 shell_exec();

      IE:

      // Vars
      putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin');
      putenv('HOME=' . $outputdir); 
      

      $outputdir = chmod 777 与 libreoffice 命令“--outdir”中的相同目录

      【讨论】:

        【解决方案7】:

        关于Universal Network Objects (UNO),有一些“即插即用”的最终用户工具,请参阅DocvertJODConverterjODconverterpyODconverter)。所有这些都可以被 PHP 调用为 web-service 或 exec。

        【讨论】:

          【解决方案8】:

          它对我有用。

          您可以使用libreoffice将docx转换为HTML,您需要给予适当的权限输出目录

          exec("export HOME='/var/www/html/wp/wp-content/uploads/' && /usr/bin/libreoffice --headless   --convert-to html --outdir '/var/www/html/wp/wp-content/uploads/' /var/www/html/wp/wp-content/uploads/demo.docx");
          

          【讨论】:

            猜你喜欢
            • 2018-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-23
            • 2011-01-07
            • 2018-06-21
            • 1970-01-01
            相关资源
            最近更新 更多