GNU/Linux >> Tutoriels Linux >  >> Linux

Convertir le fichier en PDF à l'aide de LibreOffice sous l'utilisateur apache (c'est-à-dire lors de l'utilisation de PHP)

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 ?


Linux
  1. Comment configurer l'authentification de base dans Apache à l'aide de .htaccess

  2. Le journal d'accès Apache définit automatiquement les autorisations

  3. Utilisation de rz et sz sous linux shell

  4. Comment spécifier une clé privée lors du décryptage d'un fichier à l'aide de GnuPG ?

  5. Comment empêcher l'accès à un fichier d'être servi par Tomcat ?

Comment convertir des fichiers PDF au format EPUB à l'aide de Calibre sous Linux

Comment convertir des images JPG en PDF à l'aide du terminal

Comment convertir un PDF en image avec Gimp

Apache ne peut pas accéder au fichier alors qu'il a l'autorisation ?

Accorder l'accès à l'utilisateur Sudo (ajouter au fichier Sudoers ou au groupe Wheel)

Comment convertir des fichiers en différents formats sans utiliser de logiciel