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?