2015-05-11 1 views
2

Я использую unoconv как пользователь apache для создания файлов PDF. Он работает нормально как пользователь терминала, но когда я запускаю его как пользователь Apache. Я получаю ошибки.Unoconv as 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 Машина

ответ

2

я рекомендую следующее:

  • использовать последнюю версию unoconv (по крайней мере v0.7, когда он будет выпущен, или мастер-ветвь от GitHub сегодня)

  • использовать самые последние стабильный выпуск LibreOffice (последние выпуски используют меньше памяти, как правило, намного быстрее и сбой меньше)

  • использовать родной LibreOffice python для запуска unoconv, например. /opt/libreoffice4.4/program/python/USR/бен/unoconv -f PDF file.doc

  • жёстко питон путь в unoconv притон сценария, так что поставить на первую строку #!/Opt/libreoffice4. 4/program/python, а не #!/Usr/bin/env python. (Apache/PHP обычно не устанавливается PATH, так unoconv не удается)

  • гарантируют, что пользователь работает unoconv имеет доступ к своему домашнему каталогу

Если вы выше, все должно работать хорошо. Если LibreOffice по-прежнему выйдет из строя, вы должны обсудить это с проектом вверх. Также будьте осторожны, что LibreOffice не может обрабатывать более одного соединения/клиента одновременно, поэтому в идеале ваш PHP-скрипт должен правильно блокировать и/или очереди запросов.

Если у вас есть какие-либо вопросы, пожалуйста, сообщите им: http://github.com/dagwieers/unoconv/issues

2

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.

+1

Это он бежит от терминала как апача пользователя, но не из PHP-файла. Я на __CentOS 7__ –