Libreoffice - 除非root用户拒绝转换,否则无法使用PHP脚本

Gre*_*reg 12 php linux libreoffice

运行无头Ubuntu服务器12.something.

根@服务器: chown www-data /my/path/ -R

根@服务器: chgrp www-data /my/path/ -R

根@服务器: chmod 755 /my/path/ -R

根@服务器: libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.


根@服务器: sudo -i -u www-data

$libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf
Error: Please reverify input parameters...
Run Code Online (Sandbox Code Playgroud)

该死的.


根@服务器: sudo -i -u someotheruser

$libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf
Error: Please reverify input parameters...
Run Code Online (Sandbox Code Playgroud)

该死的.

任何人都有任何想法?试图研究这个让我更加困惑.这可能是一个错误还是一些依赖怪癖?

小智 16

我终于找到了答案......添加:

export HOME=/tmp &&
Run Code Online (Sandbox Code Playgroud)

到了开头,所以:

export HOME=/tmp && libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path
Run Code Online (Sandbox Code Playgroud)

这对我在CentOS 6.5上工作,在PHP中作为shell_exec().

  • 这应该是公认的答案.你救了我的一天. (5认同)
  • 您还可以使用:`HOME =/tmp libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir/my/path`,因为您只为一个进程设置HOME变量. (2认同)

Mat*_*ler 5

当作为sofficeNodeJS应用程序的一部分在CloudFoundry(Diego)容器中运行二进制无头(LibreOffice 5.0.5.2)时,我们面临相同的问题。

似乎较新的版本libreoffice不期望可写HOME,而是尝试写入TMPDIR

strace 显示: 8349 mkdir("app/tmp", 0777) = -1 ENOENT (No such file or directory) 8349 open("app/tmp/lu8349pzgegi.tmp", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 ENOENT (No such file or directory)

TMPDIR=app/tmp

我们通过将其设置TMPDIR为App进程的用户可以写的目录来修复它,即TMPDIR=/tmp在CloudFoundry上:

process.env.TMPDIR = "/tmp";


sNI*_*sss 5

您需要做的所有事情 - 创建文件夹“/var/www/.config”。当您尝试转换 www-data 用户 libreoffice 下的某些文件时,需要用户主目录中的“.config”目录。但 libreoffice 无权创建此类文件夹。用户 www-data 默认主目录是“/var/www”。所以只需运行命令:

sudo mkdir /var/www/.config
sudo chmod 700 /var/www/.config
sudo chown www-data /var/www/.config
Run Code Online (Sandbox Code Playgroud)


Mys*_*srt -1

就像 Jacek 在他的评论中所说的那样,让您尝试以 sudoer 身份执行命令的用户无需密码。然后将你的 libreoffice 命令更改为

sudo libreoffice <rest of command>
Run Code Online (Sandbox Code Playgroud)

为我工作。我遇到过同样的问题。