use*_*531 11 linux centos apache-http-server php libreoffice
我安装了 libreoffice-headless 并且可以在以普通用户身份登录 shell 时转换文档。
[root@desktop ~]# yum install libreoffice-headless
[root@desktop ~]# yum install libreoffice-writer
[root@desktop ~]# su NotionCommotion
sh-4.1$ /usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc
convert /tmp/ayb/document_34.doc -> /tmp/ayb/document_34.pdf using writer_pdf_Export
Run Code Online (Sandbox Code Playgroud)
我现在希望做同样的事情,但使用 PHP,因此作为用户 apache,但是,以下不会转换文件。
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
Run Code Online (Sandbox Code Playgroud)
为了进行故障排除,我以用户 apache 的身份通过 shell 运行了相同的命令,但它仍然不会转换文件:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Run Code Online (Sandbox Code Playgroud)
Apache 与普通用户不同,没有家,我记得听说我可能需要HOME=/tmp/ayb
在尝试转换之前指定一个家,但这没有帮助(我认为在使用 CentOS 5.8 和可能是不同版本的 LibreOffice 时,它有,但不确定)。
以 apache 用户身份运行文件时,如何使用 libreoffice 将文件转换为 PDF?
安装系统:
CentOS 6.4
httpd.x86_64 2.2.15-28.el6.centos @updates
libreoffice-headless.x86_64 1:3.4.5.2-16.1.el6_3 @base
Run Code Online (Sandbox Code Playgroud)
ter*_*don 16
这里有两个问题。第一个是www-data
(apache 用户)没有$HOME
所以 libreoffice 如果没有$HOME
定义就不能运行。第二个问题是,除非你专门这样设置(你真的真的不应该),apache
否则无法访问系统/tmp
目录。Web 服务器通常在受限环境中运行,并且出于非常有效的安全原因不能完全访问文件系统。
所以,你需要 i) 给 apache 的用户一个家,ii) 给它一个可以写入的tmp
目录。 所以,在你存储网页的同一文件夹中创建一个目录,然后运行以下php
代码:
<?php
shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
Run Code Online (Sandbox Code Playgroud)
我刚刚测试过,它在我的机器上完美运行。确保您./tmp
的权限设置为 777。此外,如果您玩弄太多,您可能需要重新启动 apache。一段时间后,当我进行更改时,它停止为我工作,我需要重新启动它。