GNU/Linux >> Tutoriales Linux >  >> Linux

Convierta el archivo a PDF usando LibreOffice bajo el usuario apache (es decir, cuando usa PHP)

Hay dos problemas aquí. La primera es que www-data (el usuario de apache) no tiene un $HOME por lo que libreoffice no puede ejecutarse si no hay $HOME definido. El segundo problema es que, a menos que lo configures específicamente de esta manera (y realmente no deberías), apache no tiene acceso al sistema /tmp directorio. Un servidor web normalmente se ejecuta en un entorno restringido y no tiene acceso completo al sistema de archivos por razones de seguridad muy válidas.

Por lo tanto, debe i) darle un hogar al usuario de apache y ii) darle un directorio al que tenga acceso para escribir. Entonces, cree un tmp directorio en la misma carpeta donde almacena su página web y luego ejecute el siguiente php código:

<?php
  shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>

Acabo de probar y funciona perfectamente en mi máquina. Asegúrate de que tu ./tmp tiene sus permisos establecidos en 777. Además, es posible que deba reiniciar Apache si juega demasiado con él. Dejó de funcionar para mí después de un tiempo cuando hice cambios y tuve que reiniciarlo.


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 enorme archivo de registro 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 rastro, cambié los permisos recursivamente para la carpeta /var/spool/libreoffice a 777 .

Después de eso, la conversión comenzó a funcionar para todos los usuarios.

Tal vez también obtengas Permission denied en algún otro archivo, se maneja de forma silenciosa y necesita corregir los permisos para su usuario?


Linux
  1. Otorgar acceso de usuario a Sudo (agregar al archivo de Sudoers o al grupo de ruedas)

  2. El registro de acceso de Apache establece permisos automáticamente

  3. ubicación del archivo temporal cuando se usa tmpfile() en C

  4. Usar vim para forzar la edición de un archivo cuando lo abrió sin permisos

  5. ¿Cómo bloquear el acceso a un archivo para que no sea atendido por Tomcat?

Cómo convertir archivos PDF a formato EPUB usando Calibre en Linux

Cómo configurar la autenticación básica en Apache usando .htaccess

Cómo convertir imágenes JPG a PDF usando la terminal

Cómo convertir PDF a imagen usando Gimp

¿Apache no puede acceder al archivo mientras tiene permiso?

Cómo convertir archivos a diferentes formatos sin usar software