Ici, nous avons deux problèmes. La première est que www-data
(l'utilisateur apache) n'a pas de $HOME
donc libreoffice ne peut pas fonctionner s'il n'y a pas de $HOME
défini. Le deuxième problème est, à moins que vous ne le configuriez spécifiquement de cette façon (et vous ne devriez vraiment vraiment pas), apache
n'a pas accès au système /tmp
annuaire. Un serveur Web fonctionne normalement dans un environnement restreint et n'a pas un accès complet au système de fichiers pour des raisons de sécurité très valables.
Donc, vous devez i) donner à l'utilisateur d'Apache une maison et ii) lui donner un répertoire auquel il a accès pour écrire. Donc, créez un tmp
répertoire dans le même dossier où vous stockez votre page Web, puis exécutez le php
suivant code :
<?php
shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
Je viens de tester et cela fonctionne parfaitement sur ma machine. Assurez-vous que votre ./tmp
a ses autorisations définies sur 777. De plus, vous devrez peut-être redémarrer apache si vous jouez trop avec. Il a cessé de fonctionner pour moi après un certain temps lorsque j'ai apporté des modifications et que j'ai dû le redémarrer.
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 ça :
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Suite à cette piste, j'ai modifié les autorisations de manière récursive pour le dossier /var/spool/libreoffice
à 777
.
Après cela, la conversion a commencé à fonctionner pour chaque utilisateur.
Peut-être obtenez-vous aussi Permission denied
sur un autre fichier, il est géré en silence et vous devez corriger les autorisations de votre utilisateur ?