Configurar apache para ejecutar unoconv y no morir en el intento
Unoconv es un conversor de documentos de LibreOffice / Openffice a otros formatos, entre ellos el PDF.
En este script solo uso dos variables Origen del archivo y destino del resultado, podriamos añadir una tercera variable que fuera el formato de salida, en mi caso como solo quiero transformar documentos a pdf lo he dejado asi:
Fichero script:
libreofficeconverter.sh
Código:
#!/bin/bash
if [ -z "$1" ]; then
echo "Must pass source file to convert to pdf";
exit 10;
fi
# Asumimos que unoconv esta situado en /usr/bin/unoconv
/usr/bin/unoconv -f pdf --output $1 $2
chown www-data $1
chgrp www-data $1
si os fijais uso chown y chgrp para hacer que el fichero tenga los permisos del ussuario de apache. En mi caso para poder eliminar o modificar esos ficheros desde PHP. Si estas dos ultimas lineas no se ponen, el fichero será creado como root
Como root ejecutaremos el siguiente comando
Al final del archivo añadimos nuestro script para que apache pueda ejecutarlo
Código:
www-data ALL=NOPASSWD: /ruta/al/script/libreofficeconverter.sh
Guardamos los datos
y el script en php:
Código:
$fichero_origen = "/ruta/del/archivo/de/origen/documento.odt";
$fichero_salida = "/ruta/del/archivo/de/destino/resultado.pdf";
shell_exec('sudo /ruta/al/script/libreofficeconverter.sh ' . $fichero_salida .' '.$fichero_origen);
Ten en cuenta que le pasamos dos variables al script $1 y S2 que son el origen y el destino
Espero que esto os sirva, ya que he estado buscando durante mucho tiempo la solución a este problema que tenia que no conseguia hacerlo funcionar bajo web.