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?