Я установил libreoffice-headless и могу конвертировать документы при входе в оболочку как обычный пользователь.
[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
Теперь я хочу сделать то же самое, но с использованием PHP и, следовательно, как пользователь apache, однако, следующее не будет конвертировать файл.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
В попытке устранить неполадки я выполнил через оболочку ту же команду, что и пользователь apache, но все равно он не будет преобразовывать файл:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Apache, в отличие от обычных пользователей, не имеет дома, и я помню, что слышал, что мне может потребоваться указать домашнее использование, HOME=/tmp/ayb
прежде чем пытаться конвертировать, но это не помогает (я думаю, что при использовании CentOS 5.8 и, возможно, другой версии LibreOffice, это сделал, но не уверен).
Как мне преобразовать файл в PDF, используя libreoffice, когда он запускается как пользователь apache?
Установленная система:
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
источник
export HOME=/tmp/ayb libreoffice --headless ...
работает? Какова цельexport
и почему неHOME=/tmp/ayb; libreoffice --headless....
работает?/tmp
вам, вы можете это сделать. Тем не менее, с точки зрения безопасности рекомендуется не предоставлять вашему веб-серверу доступ к внешним каталогам/var/www
.export
экспортирует переменную, делая ее доступной для всех последующих оболочек и следя за тем, чтобы&&
она работала, только если экспорт был успешным. Я не уверен в деталях, apache может быть довольно разборчивым в отношении разрешений, всегда лучше хранить все в своейwww
папке./tmp
, и хорошая вещь (я думаю) об использовании его в том, что он автоматически удаляет старые файлы. Но опять же, я понимаю вашу точку зрения о том, чтобы держать все под/var/www
.libreoffice --headless
умирает послеX11 connection rejected because of wrong authentication
сообщения).У меня была похожая проблема на Debian, и я решил ее.
Запустите вашу команду, но с
strace
самого начала, вот так:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Это создаст огромный лог-файл с каждым доступом к системному API и его результатам.
В моем случае где-то возле линии 5000 было что-то вроде этого:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Следуя этому пути, я рекурсивно изменил разрешения для папки
/var/spool/libreoffice
на777
.После этого конвертация начала работать для каждого пользователя.
Может быть, вы также попадаете
Permission denied
на какой-то другой файл, он обрабатывается без вывода сообщений, и вам нужно исправить права доступа для вашего пользователя?источник