2012-01-29 3 views
11

J'ai installé libreoffice headless sur un serveur freebsd avec apache afin de convertir des documents par programme (par exemple odt-> pdf). Cela fonctionne à partir de la ligne de commande! Mais mon objectif est de pouvoir le faire à partir de PHP. Cela exige que l'utilisateur Web (www) puisse exécuter libreoffice. Mais ce n'est pas possible.Exécution libreoffice à partir de php exec()

Lors de l'exécution LibreOffice comme mon propre utilisateur, je reçois:

%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 
% 

Si je tente la même commande en tant que root, il ne fonctionne pas. La même chose est le problème avec le www utilisateur de php:

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

Le problème est que je ne reçois aucune information de LibreOffice, donc je ne sais pas pourquoi LibreOffice ne veut pas courir comme d'autres utilisateurs que le mien.

Ma question est: Comment donner à l'utilisateur www l'autorisation d'exécuter libreoffice via exec() en PHP?

+2

Est-ce juste un problème de PATH? Qu'y a-t-il dans leurs '$ PATH' respectifs? – Wrikken

+1

Vous avez testé par ligne de commande avec l'utilisateur root, '% sudo php program.php', que le client a la permission? –

Répondre

3

Pas strictement une réponse, mais plutôt que d'utiliser l'exec de PHP, vous pourriez envisager d'utiliser PUNO, un module PHP5 qui donne accès à l'API OpenOffice.org UNO Programming.

1

J'avais le même problème et oui (merci Wrikken) après avoir ajouté /usr/local/sbin à la variable d'environnement PATH, j'ai pu exécuter libreoffice comme www-data sous apache.

+0

@nikyspag Monsieur, s'il vous plaît pourriez-vous partager votre code avec moi. –

10

j'ai réussi à résoudre ce problème avec un export HOME=/tmp rapide avant d'exécuter la commande de conversion, cela donne quelque part LibreOffice inscriptibles travailler c'est magique.

+0

C'est très intelligent ... Vous m'avez probablement sauvé beaucoup de temps. Merci. – Scalpweb

+0

Cela résout les conversions suspendues de PHP pour moi, mais pouvez-vous me dire ce que cela fait exactement? Pourquoi cela résout-il les conversions suspendues? – Rvanlaak

+0

Libreoffice écrit les fichiers cachés/temporaires/cachés dans le répertoire personnel de l'utilisateur (l'utilisateur qui exécute PHP, normalement Apache ou http ou www-data). L'utilisateur qui exécute PHP à partir d'un serveur web (pas de CLI) n'a normalement pas de répertoire de départ, donc la variable $ HOME env sera vide ou non définie et libreoffice ne peut pas écrire dans /. Donc, mettre explicitement cela à tmp donne à libreoffice un peu d'espace avec la permission d'écrire. HTH –

0

Je recommanderai d'installer le chemin de configuration d'abord exec() ou shell_exec();

IE:

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

$ outputdir = chmod 777 Et même forlder de commande LibreOffice "--outdir"

Questions connexes