2012-04-16 10 views
8

Mam serwer internetowy skonfigurowany na moim laptopie. Buduję aplikację internetową, do której uzyskuję dostęp przez sieć lokalną. Mam plik php, który zawiera następujące wiersze:Nie można uruchomić programu Oowriter jako użytkownik WWW

$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); 

Tak, problem jest to, że po uruchomieniu powyższego kodu w terminalu php działa doskonale. Jednak po uzyskaniu dostępu do przeglądarki internetowej dane wyjściowe są puste i nie dokonuje się konwersji zgodnie z przeznaczeniem.

dziennik błędów Apache wykazuje następujące linie:

[ramy Java] Błąd w funkcji createSettingsDocument (elements.cxx).
niepowodzenie javaldx!
Ostrzeżenie: nie można odczytać ścieżkę z javaldx

próbowałem rozwiązań z https://wiki.archlinux.org/index.php/Libreoffice#Fixing_Java_Framework_Error. Ale to nie zadziałało.

Używam OpenJDK 7.

Czy ktoś ma jakiś pomysł, w jaki sposób dokonać tej pracy?

+0

W moim przypadku ustawienie HOME =/tmp, katalog libreoffice próbuje uzyskać dostęp, sprawił, że działa. Fraber i ConsuLanza Informatica mają dobre podejście. Thx faceci. Ponadto, odpowiedź "greatmatter" w tym [odnośnym wpisie] (https://stackoverflow.com/questions/12101855/libreoffice-headless-refuses-to-convert-unless-root-wontwork-from-php-scrip) pomogła mi w końcu to wymyśliłem. –

Odpowiedz

3

OpenOffice potrzebuje katalogu użytkownika. Ponieważ próbujesz wywołać OpenOffice na serwerze WWW, musisz przyznać odpowiedni dostęp do zapisu dla użytkownika. Na Debianie, na przykład, że oznaczałoby umożliwienie www-data napisać do /var/www/.openoffice.org/:

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

Nie mogę zaznaczyć tej odpowiedzi, ponieważ nie wiem, czy pomaga ona w problemie PO, ale przydałoby się wiedzieć, jeśli chodzi o używanie LibreOffice bez głowy z Alfresco 4.2, ponieważ ten błąd pojawia się w dziennikach podczas próby (i niepowodzenie) do podglądu dokumentów. – Vaughany

6

Nie można głosować, nie mogę się wypowiedzieć (dotychczas) ... Więc ...

To, co Tim-Erwin powiedział, jest prawdą.

Błąd rzeczywiście stwierdza, że ​​Błąd w funkcji createSettingsDocument co jest wskazówką, że niektóre funkcja o nazwie createSettingsDocument (uwaga: tworzenie Ustawienia dokumentu) zawodzi ....

Oto jak (lub przynajmniej ja) zmusić go do pracy:

  1. Run urząd libre jako zwykły użytkownik raz i zwróć uwagę na nazwę katalogu ona tworzy.
  2. Sprawdź, który użytkownik działa na serwerze (lub którego użytkownika PHP używa jako, który może różnić się od danych www, jeśli korzystasz z FPM itp.).
  3. Sprawdź co katalog domowy jest ustawiony dla tego użytkownika (od /etc/passwd na przykład)
  4. utworzyć katalog zanotowany w kroku 1 katalogu z kroku 3
  5. Zmiana właściciela utworzonego katalogu do potrzebnym katalogu użytkownika z kroku 2

na mój serwer był rzeczywiście /var/www/LibreOffice, natomiast w moim komputerze stacjonarnym, katalog będzie od już /var/www /.config/libreoffice, więc musisz się upewnić.

1

Otrzymałem ten sam komunikat o błędzie z "ooffice --headless --convert-to pptx filename" z serwera WWW (właściwie "NaviServer" 4,99). Powyższe rozwiązania nie rozwiązały mojego problemu, ale postawiły mnie na właściwej drodze. Okazało się, że NaviServer zmienia zmienną środowiskową "HOME" na katalog instalacyjny/usr/local/ns, aby LibreOffice próbował uzyskać dostęp i utworzyć folder .config w tym katalogu. Dowiedziałem się, wykonując polecenie "set" BASH z serwera WWW i sprawdzając zmienne środowiskowe.

3

Odpowiedź Frabera rozwiązała problem dla mnie!

używany:

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

LibreOffice następnie stworzył '.config' i katalogów 'LibreOffice' w katalogu skryptu php. Oczywiście musi to być możliwe do zapisania w procesie serwera sieciowego.

+0

To jest poprawna odpowiedź - już od kilku godzin próbuję użyć zarówno unoconv, jak i libreoffice bezpośrednio. – ckm

+0

dzięki, to jest poprawna odpowiedź. –

Powiązane problemy