Instalei o libreoffice-headless e posso converter documentos quando logado no shell como um usuário 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
Agora desejo fazer a mesma coisa, mas usando o PHP e, portanto, como usuário apache, no entanto, o seguinte não converterá o arquivo.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
Na tentativa de solucionar problemas, executei o mesmo comando através do shell que o usuário apache, mas ele ainda não converterá o arquivo:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
O Apache, diferentemente dos usuários normais, não possui uma casa, e lembro-me de ouvir que talvez seja necessário especificar uma casa HOME=/tmp/ayb
antes de tentar converter, mas isso não ajuda (acho que ao usar o CentOS 5.8 e provavelmente uma versão diferente do LibreOffice, (mas não tenho certeza).
Como converter um arquivo em PDF usando o libreoffice ao executá-lo como usuário 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
fonte
export HOME=/tmp/ayb libreoffice --headless ...
funciona? Qual é o objetivoexport
e por que nãoHOME=/tmp/ayb; libreoffice --headless....
funciona?/tmp
você, é livre para fazê-lo. No entanto, é recomendável, do ponto de vista da segurança, não conceder ao servidor da Web acesso a diretórios externos/var/www
.export
exporta a variável, disponibilizando-a para todos os shells subseqüentes e&&
assegura que seja executada apenas se a exportação tiver sido bem-sucedida. Não tenho certeza dos detalhes, o apache pode ser bastante exigente quanto às permissões, é sempre melhor manter tudo na suawww
pasta./tmp
e uma coisa boa (eu acho) sobre usá-lo é que ele limpa automaticamente os arquivos antigos. Mas, novamente, vejo o seu ponto de manter tudo embaixo/var/www
.libreoffice --headless
morre após aX11 connection rejected because of wrong authentication
mensagem).Eu tive um problema semelhante no Debian e resolvi-o.
Execute seu comando, mas com
strace
no início, assim:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Isso produzirá um arquivo de log enorme com todo acesso à API do sistema e seu resultado.
No meu caso, em algum lugar próximo à linha 5000, havia algo parecido com isto:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Após essa trilha, alterei as permissões recursivamente para a pasta
/var/spool/libreoffice
para777
.Depois disso, a conversão começou a funcionar para todos os usuários.
Talvez você também tenha
Permission denied
outro arquivo, ele é tratado silenciosamente e você precisa corrigir as permissões do seu usuário?fonte