GNU/Linux >> Znalost Linux >  >> Linux

Převeďte soubor do PDF pomocí LibreOffice pod uživatelským apache (tj. při použití PHP)

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?


Linux
  1. Udělte sudo přístup v RHEL a CentOS

  2. Jak optimalizovat ukládání statických souborů Apache do mezipaměti na Ubuntu 18.04

  3. Udělit uživateli přístup Sudo (přidat do souboru Sudoers nebo skupiny Wheel)

  1. Jaký je účel souboru .bash_profile pod uživatelským domovským adresářem v Linuxu

  2. dočasné umístění souboru při použití tmpfile() v C

  3. Kopírování souboru pouze v případě, že je novější než cíl

  1. Použití rz a sz pod linuxovým shellem

  2. Použití vim k vynucení úprav souboru při otevření bez oprávnění

  3. Jak zablokovat přístup k souboru, aby nebyl obsluhován službou Tomcat?