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

时间:2012-08-24 00:38:46

标签: php linux libreoffice

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

root @ server:chown www-data /my/path/ -R

root @ server:chgrp www-data /my/path/ -R

root @ server:chmod 755 /my/path/ -R

root @ server:libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf

像魅力一样。


root @ server: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...

该死。


root @ server: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...

该死。

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

8 个答案:

答案 0 :(得分:15)

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

export HOME=/tmp &&

到开头,所以:

export HOME=/tmp && libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

这在CentOS 6.5上适用于我,在PHP中也适用于shell_exec()。

答案 1 :(得分:4)

我们在CloudFoundry(Diego)容器中运行soffice二进制无头(LibreOffice 5.0.5.2)作为NodeJS应用程序的一部分时遇到了同样的问题。

似乎较新版本的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设置为可由应用进程'用户编写的目录(即CloudFoundry上的TMPDIR=/tmp)来修复它:

process.env.TMPDIR = "/tmp";

答案 2 :(得分:1)

所有您需要做的-创建文件夹“ /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

答案 3 :(得分:0)

正如Jacek在他的评论中所述,让用户尝试执行命令作为sudoer而不需要密码。然后将libreoffice命令更改为

sudo libreoffice <rest of command>

为我工作。我有同样的问题。

答案 4 :(得分:0)

我能够通过以下方法解决此问题:首先删除文件,然后运行转换文件。似乎由于文件所有者问题,文件覆盖失败。

答案 5 :(得分:0)

对我来说,这是因为输出文件夹无法写。使用--outdir并指定可写文件夹。

如果输出文件已经存在,它将自动覆盖。

示例:

$ libreoffice --headless --convert-to pdf --outdir myfolder/ myfile.docx

答案 6 :(得分:-1)

我会看看

http://dag.wieers.com/home-made/unoconv/

此工具应该更适合正确转换文件。它可以在ubuntu repos上使用,因此安装应该没有问题。

答案 7 :(得分:-1)

您无法使用www-data用户运行libreoffice soffice二进制文件。请使用具有sudo权限的用户。检查我的要点https://gist.github.com/nathanielvarona/423bda9e4a8a4f0f9bbf#file-soffice-listener-sh

因为您将在PHP中使用它。只是尝试一下PHP-FPM。安装它,然后修改/etc/php5/fpm/pool.d/www.conf文件。

来自

user = www-data 
group = www-data

要:

user = ubuntu
group = ubuntu

我已成功在AWS EC2和我的VBox VM中运行它。