Jsou zde dva problémy. První je, že www-data
(uživatel Apache) nemá $HOME
takže libreoffice nemůže běžet, pokud neexistuje $HOME
definovaný. Druhý problém je, pokud to takto konkrétně nenastavíte (a to byste opravdu neměli), apache
nemá přístup do systému /tmp
adresář. Webový server normálně běží v omezeném prostředí a nemá plný přístup k systému souborů z velmi oprávněných bezpečnostních důvodů.
Takže musíte i) dát uživateli Apache domov a ii) dát mu adresář, do kterého má přístup k zápisu. Vytvořte tedy tmp
adresář ve stejné složce, do které ukládáte svou webovou stránku, a poté spusťte následující php
kód:
<?php
shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
Právě jsem testoval a na mém stroji funguje perfektně. Zkontrolujte, zda je vaše ./tmp
má svá oprávnění nastavena na 777. Také možná budete muset restartovat apache, pokud si s ním příliš hrajete. Přestal mi po chvíli fungovat, když jsem provedl změny a potřeboval jsem jej restartovat.
Měl jsem podobný problém na Debianu a vyřešil jsem ho.
Spusťte příkaz, ale s strace
na začátku takhle:
strace -f -o output.txt soffice --headless --convert-to pdf (...)
To vytvoří obrovský soubor protokolu s každým přístupem k systémovému API a jeho výsledkům.
V mém případě někde poblíž řádku 5000 bylo něco takového:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Po této stopě jsem rekurzivně změnil oprávnění pro složku /var/spool/libreoffice
na 777
.
Poté konverze začala fungovat pro každého uživatele.
Možná získáte také Permission denied
u některého jiného souboru je zpracována tiše a potřebujete opravit oprávnění pro svého uživatele?