Instalé libreoffice-headless y puedo convertir documentos cuando inicie sesión en el shell como usuario normal.
[root@desktop ~]# yum install libreoffice-headless
[root@desktop ~]# yum install libreoffice-writer
[root@desktop ~]# su NotionCommotion
sh-4.1$ /usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc
convert /tmp/ayb/document_34.doc -> /tmp/ayb/document_34.pdf using writer_pdf_Export
Ahora deseo hacer lo mismo, pero usando PHP y, por lo tanto, como usuario apache, sin embargo, lo siguiente no convertirá el archivo.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
En un intento de solucionar problemas, ejecuté el mismo comando a través del shell que el usuario apache, pero aún así no convertirá el archivo:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Apache, a diferencia de los usuarios normales, no tiene un hogar, y recuerdo haber escuchado que podría necesitar especificar un hogar usando HOME=/tmp/ayb
antes de intentar convertir, pero no ayuda (creo que cuando uso CentOS 5.8 y probablemente una versión diferente de LibreOffice, lo hice, pero no estoy seguro).
¿Cómo convierto un archivo a PDF usando libreoffice cuando lo ejecuto como usuario apache?
Sistema instalado
CentOS 6.4
httpd.x86_64 2.2.15-28.el6.centos @updates
libreoffice-headless.x86_64 1:3.4.5.2-16.1.el6_3 @base
fuente
export HOME=/tmp/ayb libreoffice --headless ...
funciona? ¿Paraexport
qué sirve y por qué noHOME=/tmp/ayb; libreoffice --headless....
funciona?/tmp
puede hacerlo. Sin embargo, desde el punto de vista de la seguridad, es una buena idea no permitir que su servidor web acceda a directorios externos/var/www
.export
exporta la variable, dejándola disponible para todos los shells posteriores y&&
se asegura de que se ejecute solo si la exportación se realizó correctamente. No estoy seguro de los detalles, apache puede ser bastante quisquilloso con los permisos, siempre es mejor mantener todo bajo suwww
carpeta./tmp
, y una buena cosa (creo) acerca de su uso es que purga automáticamente los archivos antiguos. Pero, de nuevo, veo su punto sobre mantener todo bajo/var/www
.libreoffice --headless
muere después delX11 connection rejected because of wrong authentication
mensaje).Tuve un problema similar en Debian y lo resolví.
Ejecute su comando, pero con
strace
al principio, así:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Esto producirá un archivo de registro enorme con cada acceso a la API del sistema y su resultado.
En mi caso, en algún lugar cerca de la línea 5000 había algo como esto:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Siguiendo este camino, he cambiado los permisos de forma recursiva para la carpeta
/var/spool/libreoffice
a777
.Después de eso, la conversión comenzó a funcionar para todos los usuarios.
¿Quizás también obtenga
Permission denied
algún otro archivo, se maneja en silencio y necesita corregir los permisos para su usuario?fuente