Zainstalowałem libreoffice-headless i mogę konwertować dokumenty po zalogowaniu do powłoki jako zwykły użytkownik.
[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
Chciałbym teraz zrobić to samo, ale używając PHP i dlatego jako apache użytkownika, jednak poniższe pliki nie będą konwertować pliku.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
Próbując rozwiązać problem, uruchomiłem to samo polecenie przez powłokę, co apache użytkownika, ale nadal nie będzie on konwertować pliku:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Apache w przeciwieństwie do zwykłych użytkowników nie ma domu i przypominam sobie, że HOME=/tmp/ayb
przed próbą konwersji może być konieczne określenie domu , ale to nie pomaga (myślę, że kiedy korzystam z CentOS 5.8 i prawdopodobnie innej wersji LibreOffice, to zrobił, ale nie jestem pewien).
Jak przekonwertować plik do formatu PDF za pomocą libreoffice, uruchamiając go jako apache użytkownika?
Zainstalowany system:
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
źródło
export HOME=/tmp/ayb libreoffice --headless ...
działa? Jaki jest celexport
i dlaczego nieHOME=/tmp/ayb; libreoffice --headless....
działa?/tmp
ciebie, możesz to zrobić. Jednak z punktu widzenia bezpieczeństwa dobrym pomysłem jest nie dać serwerowi dostępu do katalogów znajdujących się na zewnątrz/var/www
.export
eksportuje zmienną, udostępniając ją wszystkim kolejnym powłokom i&&
upewnia się, że działa tylko wtedy, gdy eksport się powiódł. Nie jestem pewien szczegółów, apache może być dość wybredny w kwestii uprawnień, zawsze lepiej jest trzymać wszystko pod swoimwww
folderem./tmp
i dobrą rzeczą (myślę) o korzystaniu z niego jest to, że automatycznie usuwa stare pliki. Ale z drugiej strony rozumiem twój punkt widzenia utrzymywania wszystkiego pod kontrolą/var/www
.libreoffice --headless
umiera poX11 connection rejected because of wrong authentication
wiadomości).Miałem podobny problem na Debianie i go rozwiązałem.
Uruchom polecenie, ale
strace
na początku tak:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Spowoduje to wygenerowanie ogromnego pliku dziennika przy każdym dostępie do systemowego interfejsu API i jego wyniku.
W moim przypadku gdzieś w pobliżu linii 5000 było coś takiego:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Idąc tą ścieżką, rekursywnie zmieniłem uprawnienia dla folderu
/var/spool/libreoffice
na777
.Następnie konwersja zaczęła działać dla każdego użytkownika.
Być może dostajesz także
Permission denied
jakiś inny plik, jest on obsługiwany w trybie cichym i musisz naprawić uprawnienia dla swojego użytkownika?źródło