GNU/Linux >> Linux Esercitazione >  >> Linux

Converti file in PDF utilizzando LibreOffice sotto l'utente apache (ovvero quando si utilizza PHP)

Ci sono due problemi qui. Il primo è www-data (l'utente apache) non ha un $HOME quindi libreoffice non può essere eseguito se non c'è $HOME definito. Il secondo problema è che, a meno che tu non lo imposti specificamente in questo modo (e davvero non dovresti davvero), apache non ha accesso al sistema /tmp directory. Un server Web normalmente viene eseguito in un ambiente ristretto e non ha pieno accesso al file system per motivi di sicurezza molto validi.

Quindi, devi i) dare all'utente di apache una home e ii) dargli una directory a cui ha accesso per scrivere. Quindi, crea un tmp directory nella stessa cartella in cui memorizzi la tua pagina web e quindi esegui il seguente php codice:

<?php
  shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>

Ho appena provato e funziona perfettamente sulla mia macchina. Assicurati che il tuo ./tmp ha i suoi permessi impostati su 777. Inoltre, potrebbe essere necessario riavviare apache se ci si gioca troppo. Ha smesso di funzionare per me dopo un po' quando ho apportato delle modifiche e avevo bisogno di riavviarlo.


Ho avuto un problema simile su Debian e l'ho risolto.

Esegui il tuo comando, ma con strace all'inizio, così:
strace -f -o output.txt soffice --headless --convert-to pdf (...)

Ciò produrrà un enorme file di registro con ogni accesso all'API di sistema e il suo risultato.
Nel mio caso, da qualche parte vicino alla riga 5000 c'era qualcosa del genere:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)

Seguendo questo percorso, ho modificato i permessi in modo ricorsivo per la cartella /var/spool/libreoffice a 777 .

Successivamente, la conversione ha iniziato a funzionare per ogni utente.

Forse ottieni anche Permission denied su qualche altro file, viene gestito silenziosamente e devi correggere i permessi per il tuo utente?


Linux
  1. Come impostare l'autenticazione di base in Apache utilizzando .htaccess

  2. Come convertire un file PPK in PEM usando Command

  3. Concedi l'accesso sudo in RHEL e CentOS

  4. Come ottimizzare la memorizzazione nella cache di file statici Apache su Ubuntu 18.04

  5. Qual è lo scopo del file .bash_profile nella directory home dell'utente in Linux

Come convertire i file PDF in formato EPUB utilizzando Calibre in Linux

Come convertire le immagini JPG in PDF utilizzando il terminale

Come convertire PDF in immagini usando Gimp

Apache non può accedere al file mentre ha l'autorizzazione?

Come convertire file in formati diversi senza utilizzare software

Utilizzo di vim per forzare la modifica di un file quando è stato aperto senza autorizzazioni