2012-01-29 16 views
11

Ho installato libreoffice headless su un server freebsd con apache per convertire i documenti a livello di codice (ad esempio, odt-> pdf). Funziona dalla riga di comando! Ma il mio obiettivo è essere in grado di farlo da php. Ciò richiede che l'utente Web (www) possa eseguire libreoffice. Ma non può.Esecuzione di libreoffice da php exec()

Quando si esegue LibreOffice come la mia utente, ottengo:

%libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc 
javaPathHelper: not found #This should not be a problem, says people on the net. 
convert /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.doc -> 
/usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.pdf using writer_pdf_Export 
% 

Se provo lo stesso comando come root, non funziona. Lo stesso è il problema con il www-utente da php:

sp# libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc 
javaPathHelper: not found 
sp# 

Il problema è che non ho ricevuto alcuna informazione da LibreOffice, quindi non so il motivo per cui LibreOffice non vuole correre come gli altri utenti rispetto il mio.

La mia domanda è: come posso dare l'autorizzazione www-user per eseguire libreoffice tramite exec() in php?

+2

è solo un problema di PATH? Cosa c'è nei rispettivi '$ PATH'? – Wrikken

+1

Hai provato da riga di comando con utente root, '% sudo php program.php', che come cliente ha il permesso? –

risposta

3

Non è propriamente una risposta, ma piuttosto che usare PHP exec, potresti prendere in considerazione l'utilizzo di PUNO, un modulo PHP5 che fornisce l'accesso all'API di programmazione UNO di OpenOffice.org.

1

Stavo avendo lo stesso problema e sì (grazie Wrikken) dopo aver anteposto /usr/local/sbin alla variabile d'ambiente PATH, ero in grado di eseguire libreoffice come www-data sotto apache.

+0

@nikyspag Signore, per favore potresti condividere il tuo codice con me. –

10

sono riuscito a risolvere questo problema con un rapido export HOME=/tmp prima di eseguire il comando di conversione, questo dà LibreOffice da qualche parte scrivibile di lavorare è magia.

+0

Questo è molto intelligente ... Probabilmente mi hai risparmiato un sacco di tempo. Grazie. – Scalpweb

+0

Questo risolve le conversioni da PHP per me, ma puoi dirmi cosa fa esattamente questo? Perché questo risolve le conversioni sospese? – Rvanlaak

+0

Libreoffice scrive i file shadow/temporanei/nascosti nella directory home dell'utente (l'utente che esegue PHP, normalmente apache o http o www-data). L'utente che esegue PHP da un server web (non dalla CLI) non ha mai normalmente una directory home, quindi la variabile env $ HOME sarà vuota o non impostata e libreoffice non può scrivere in /. Quindi impostando questo in modo esplicito su tmp dà libreoffice un po 'di spazio con il permesso di scrivere. HTH –

0

Mi raccomando di inserire il percorso di configurazione prima di eseguire exec() o shell_exec();

IE:

// Vars 
putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin'); 
putenv('HOME=' . $outputdir); 

$ OutputDir = chmod 777 E lo stesso forlder dal comando LibreOffice "--outdir"