J'ai installé libreoffice-headless et je peux convertir des documents lorsque je suis connecté au shell en tant qu'utilisateur 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
Je souhaite maintenant faire la même chose, mais en utilisant PHP et donc en tant qu'utilisateur apache, cependant, ce qui suit ne convertira pas le fichier.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
Dans une tentative de dépannage, j'ai exécuté la même commande via le shell en tant qu'utilisateur apache, mais il ne convertira toujours pas le fichier:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Apache contrairement aux utilisateurs normaux n'a pas de maison, et je me souviens avoir entendu que je devrais peut-être spécifier une maison à utiliser HOME=/tmp/ayb
avant d'essayer de convertir, mais cela n'aide pas (je pense qu'en utilisant CentOS 5.8 et probablement une version différente de LibreOffice, il mais je n'en suis pas certain).
Comment convertir un fichier au format PDF à l'aide de libreoffice lors de son exécution en tant qu'utilisateur apache?
Système installé:
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
la source
export HOME=/tmp/ayb libreoffice --headless ...
marche pas ? Quel est le butexport
et pourquoi neHOME=/tmp/ayb; libreoffice --headless....
fonctionne pas ?/tmp
faire. Cependant, c'est une bonne idée, du point de vue de la sécurité, de ne pas donner à votre serveur Web accès aux répertoires extérieurs/var/www
.export
exporte la variable, le rendant disponible à tous les coquilles suivantes et&&
assure qu'il ne fonctionne que si l'exportation a réussi. Je ne suis pas sûr des détails, apache peut être assez pointilleux sur les autorisations, il est toujours préférable de tout garder sous votrewww
dossier./tmp
, et une bonne chose (je pense) à l' utiliser est qu'il purge automatiquement les anciens fichiers. Mais là encore, je vois votre point de tout garder sous/var/www
.libreoffice --headless
meure après leX11 connection rejected because of wrong authentication
message).J'ai eu un problème similaire sur Debian et je l'ai résolu.
Exécutez votre commande, mais avec
strace
au début, comme ceci:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Cela produira un énorme fichier journal avec chaque accès à l'API système et son résultat.
Dans mon cas, quelque part près de la ligne 5000, il y avait quelque chose comme ceci:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
En suivant cette piste, j'ai changé les autorisations récursivement pour le dossier
/var/spool/libreoffice
en777
.Après cela, la conversion a commencé à fonctionner pour chaque utilisateur.
Peut-être que vous obtenez également
Permission denied
un autre fichier, il est géré en silence et vous devez corriger les autorisations de votre utilisateur?la source