2012-01-29 38 views
11

He instalado libreoffice headless en un servidor freebsd con apache para convertir documentos programáticamente (por ejemplo, odt-> pdf). ¡Funciona desde la línea de comando! Pero mi objetivo es poder hacerlo desde php. Esto exige que el usuario de la web (www) pueda ejecutar libreoffice. Pero no puedo.Ejecutando libreoffice de php exec()

Cuando se ejecuta LibreOffice como mi propio usuario, me sale:

%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 intento el mismo comando como root, no funciona. Lo mismo es el problema con el www por el usuario de PHP:

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

El problema es que no tengo ninguna información de LibreOffice, por lo tanto no sé qué LibreOffice no quiere que se ejecute como otros usuarios que mío.

Mi pregunta es: ¿Cómo otorgo permiso a www-user para ejecutar libreoffice via exec() en php?

+2

es sólo un problema de ruta? ¿Qué hay en su respectivo '$ PATH'? – Wrikken

+1

Has probado por línea de comandos con usuario root, '% sudo php program.php', que como cliente tiene permiso? –

Respuesta

3

No es estrictamente una respuesta, pero en lugar de utilizar el ejecutivo de PHP, puede considerar el uso de PUNO, un módulo PHP5 que proporciona acceso a la API de programación de OpenOffice.org UNO.

1

Estaba teniendo el mismo problema y sí (gracias Wrikken) después de anteponer /usr/local/sbin a la variable de entorno PATH pude ejecutar libreoffice como www-data en apache.

+0

@nikyspag Señor, por favor podría compartir su código conmigo. –

10

me las arreglé para solucionar este problema con una rápida export HOME=/tmp antes de ejecutar el comando de conversión, esto da LibreOffice algún lugar de escritura para trabajar su magia.

+0

Eso es muy inteligente ... Probablemente me hayas ahorrado mucho tiempo. Gracias. – Scalpweb

+0

Esto resuelve colgar conversiones de PHP para mí, pero ¿puedes decirme qué hace exactamente? ¿Por qué esto soluciona las conversiones pendientes? – Rvanlaak

+0

Libreoffice escribe archivos ocultos/temporales/ocultos en el directorio de inicio del usuario (el usuario ejecuta PHP, normalmente apache o http o www-data). El usuario que ejecuta PHP desde un servidor web (no desde CLI) nunca tiene normalmente un directorio de inicio, por lo que la variable de entorno $ HOME estará en blanco o no configurada y libreoffice no puede escribir en /. Por lo tanto, establecer esto explícitamente en tmp le da a libreoffice un poco de espacio con permiso para escribir. HTH –

0

Voy a recomendar poner la ruta de acceso primero ejecuta 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 y el mismo forlder de comandos de LibreOffice "--outdir"