2012-04-16 6 views
8

Ho un server Web impostato sul mio laptop. Sto costruendo un'applicazione web a cui sto accedendo attraverso la rete locale. Ho un file php che contiene le seguenti righe:Impossibile eseguire oowriter come utente Web

$command = "/usr/bin/oowriter --invisible --convert-to pdf /var/www/hackathon/document/gaurav.doc -outdir /var/www/hackathon/pdf/" 
exec($command, $output, $return_var); 
print_r($output); 

Quindi, il problema è che quando faccio funzionare il codice di cui sopra in php terminale funziona perfettamente. Ma quando si accede tramite un browser web, l'output è solo vuoto e nessuna conversione viene eseguita come previsto.

log degli errori di Apache mostra le seguenti righe:

[framework Java] Errore nella funzione createSettingsDocument (elements.cxx).
javaldx fallito!
Attenzione: non è riuscito a leggere il percorso da javaldx

ho cercato soluzioni da https://wiki.archlinux.org/index.php/Libreoffice#Fixing_Java_Framework_Error. Ma non ha funzionato.

Sto usando OpenJDK 7.

Qualcuno ha qualche idea su come fare questo lavoro?

+0

Nel mio caso, impostando HOME =/tmp, la directory libreoffice tenta di accedere, ha funzionato. Fraber e ConsuLanza Informatica hanno un buon approccio. Ragazzi. Inoltre, la risposta di greatmatter in questo [post correlati] (https://stackoverflow.com/questions/12101855/libreoffice-headless-refuses-to-convert-unless-root-wont-work-from-php-scrip) mi ha aiutato capirlo alla fine. –

risposta

3

OpenOffice necessita di una directory utente. Dato che stai tentando di invocare OpenOffice con il server web, devi concedere il rispettivo accesso in scrittura a utente. Su Debian, per esempio, ciò significherebbe per consentire www-data di scrivere a /var/www/.openoffice.org/:

mkdir /var/www/.openoffice.org 
chown www-data /var/www/.openoffice.org 
+1

Non riesco a contrassegnare questa risposta perché non so se è utile con il problema dell'OP, ma era utile sapere in termini di utilizzo di LibreOffice senza headless con Alfresco 4.2, poiché questo errore compare nei log quando si tenta (e in mancanza) per visualizzare l'anteprima dei documenti. – Vaughany

6

Non può votare, non posso commentare (ancora) ... Quindi ...

Ciò che Tim-Erwin ha detto è vero.

L'errore si afferma in realtà che errore nella funzione createSettingsDocument che è un suggerimento che qualche funzione denominata createSettingsDocument (nota: creare Impostazioni documento) sta venendo a mancare ....

Ecco come si (o almeno io) farlo funzionare:

  1. Run ufficio libre come un normale utente, una volta e prendere nota del nome della directory che crea.
  2. Verificare quale utente il server è in esecuzione (o quale utente PHP sta eseguendo come, che potrebbe essere diverso da www-data se si è su FPM ecc ...).
  3. Controllare ciò che l'home directory è impostato per questo utente (da /etc/passwd, per esempio)
  4. Creare la directory annotato nel passaggio 1 nella directory dal passaggio 3
  5. Modifica proprietario della directory creata al utente dal passaggio 2

Sul mio server di directory necessaria era in realtà /var/www/LibreOffice, mentre nella mia macchina desktop, la directory sarebbe di stato /var/www /.config/libreoffice quindi è necessario assicurarsi.

1

Ho ricevuto lo stesso messaggio di errore "ooffice --headless --convert-to pptx filename" da un server Web (in realtà "NaviServer" 4.99). Le soluzioni di cui sopra non hanno risolto il mio problema, ma mi hanno messo sulla strada giusta. Si è scoperto che NaviServer modifica la variabile di ambiente "HOME" nella sua directory di installazione/usr/local/ns, in modo che LibreOffice abbia tentato di accedere e creare una cartella .config in questa directory. Ho scoperto eseguendo il comando "set" di BASH dal server Web e controllando le variabili di ambiente.

3

La risposta di Fraber ha risolto il problema per me!

Usato:

$cmd = 'HOME='.getCWD().' && export HOME && libreoffice --headless ....'; 
exec($cmd); 

LibreOffice poi creato '.config' e le directory 'LibreOffice' nella directory script php. Ovviamente deve essere scrivibile dal processo del webserver.

+0

Questa è la risposta corretta - Ho sbattuto la testa su questo per diverse ore cercando di utilizzare sia unoconv che libreoffice direttamente. – ckm

+0

grazie, questa è la risposta corretta. –