Unoconv作为apache用户无法创build文件

我使用unoconv作为apache用户来创buildPDF文件。 它作为一个terminal用户运行良好,但是当我运行它作为一个Apache用户。 我得到错误。

sudo -u apache /usr/bin/unoconv -o /home/gloryque/tmp/1431347151.pdf -f pdf /home/gloryque/tmp/8.doc 

我收到错误

 mkstemp("/usr/share/httpd/.execoool7VwpU") failed: Permission denied mkstemp("/usr/share/httpd/.execooouoUVdw") failed: Permission denied mkstemp("/usr/share/httpd/.execooopRuy27") failed: Permission denied mkstemp("/usr/share/httpd/.execooov92dRJ") failed: Permission denied mkstemp("/usr/share/httpd/.execoooiZZVFl") failed: Permission denied mkstemp("/usr/share/httpd/.execooowk5LuX") failed: Permission denied mkstemp("/usr/share/httpd/.execoooCgtDjz") failed: Permission denied mkstemp("/usr/share/httpd/.execoooLxXy8a") failed: Permission denied mkstemp("/usr/share/httpd/.execooo8LCvXM") failed: Permission denied 

我在一个centos 7机器上

我建议如下:

  • 使用最新版本的unoconv(至少v0.7发布时,或者GitHub的master分支)

  • 使用LibreOffice最新的稳定版本(最近的版本使用更少的内存,通常要快得多,崩溃也少)

  • 使用原生的LibreOffice python二进制运行unoconv,例如。 /opt/libreoffice4.4/program/python/usr/bin/unoconv -f pdf file.doc

  • 在unoconv脚本shebang中硬编码Python路径,所以放在第一行#!/ opt / libreoffice4.4 / program / python而不是#!/ usr / bin / env python。 (Apache / PHP通常不会设置PATH,所以unoconv失败)

  • 确保运行unoconv的用户可以访问其HOME目录

如果你这样做,一切都应该正常工作。 如果LibreOffice仍然崩溃,则应该将其与上游项目一起使用。 另外要注意,LibreOffice不能同时处理多个连接/客户端,所以理想情况下,您的PHP脚本应该正确锁定和/或排队请求。

如果您仍然有任何问题,请将其报告至: http : //github.com/dagwieers/unoconv/issues

unoconv试图在/usr/share/httpd写入一些临时数据。 显然没有这样做的许可。

在我的测试中(在Ubuntu系统上), HOME环境变量一直是关键。 运用

 HOME=/tmp sudo -u apache /usr/bin/unoconv -o /home/gloryque/tmp/1431347151.pdf -f pdf /home/gloryque/tmp/8.doc 

暂时将HOME设置为/tmp解决了这个问题。

apache用户还需要将结果数据写入目标目录/home/gloryque/tmp