GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konvertieren Sie die Datei mit LibreOffice unter dem Benutzer Apache (z. B. bei Verwendung von PHP) in PDF

Hier gibt es zwei Probleme. Der erste ist dieser www-data (der Apache-Benutzer) hat keinen $HOME Libreoffice kann also nicht ausgeführt werden, wenn $HOME nicht vorhanden ist definiert. Das zweite Problem ist apache, es sei denn, Sie haben es ausdrücklich so eingerichtet (und das sollten Sie wirklich, wirklich, wirklich nicht). hat keinen Zugriff auf das System /tmp Verzeichnis. Ein Webserver läuft normalerweise in einer eingeschränkten Umgebung und hat aus sehr triftigen Sicherheitsgründen keinen vollen Zugriff auf das Dateisystem.

Sie müssen also i) dem Benutzer von Apache ein Zuhause geben und ii) ihm ein Verzeichnis geben, auf das er schreiben kann. Erstellen Sie also einen tmp Verzeichnis im selben Ordner, in dem Sie Ihre Webseite speichern, und führen Sie dann den folgenden php aus Code:

<?php
  shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>

Ich habe es gerade getestet und es funktioniert perfekt auf meiner Maschine. Stellen Sie sicher, dass Ihr ./tmp hat seine Berechtigungen auf 777 gesetzt. Außerdem müssen Sie Apache möglicherweise neu starten, wenn Sie zu viel damit herumspielen. Es funktionierte bei mir nach einer Weile nicht mehr, als ich Änderungen vornahm und es neu starten musste.


Ich hatte ein ähnliches Problem unter Debian und habe es gelöst.

Führen Sie Ihren Befehl aus, aber mit strace am anfang so:
strace -f -o output.txt soffice --headless --convert-to pdf (...)

Dies erzeugt bei jedem Zugriff auf die System-API und deren Ergebnis eine riesige Protokolldatei.
In meinem Fall gab es irgendwo in der Nähe von Zeile 5000 so etwas:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)

Nach dieser Spur habe ich die Berechtigungen für den Ordner /var/spool/libreoffice rekursiv geändert bis 777 .

Danach begann die Konvertierung für jeden Benutzer zu funktionieren.

Vielleicht erhalten Sie auch Permission denied Bei einer anderen Datei wird sie im Hintergrund behandelt, und Sie müssen die Berechtigungen für Ihren Benutzer ändern?


Linux
  1. So optimieren Sie das Cachen statischer Apache-Dateien unter Ubuntu 18.04

  2. Benutzer Sudo-Zugriff gewähren (Zur Sudoers-Datei oder Wheel-Gruppe hinzufügen)

  3. Das Apache-Zugriffsprotokoll legt automatisch Berechtigungen fest

  4. Kopieren einer Datei nur, wenn sie neuer als das Ziel ist

  5. Verwendung von rz und sz unter Linux-Shell

So konvertieren Sie PDF-Dateien mit Calibre in Linux in das EPUB-Format

So konvertieren Sie JPG-Bilder mit dem Terminal in PDF

So konvertieren Sie PDF in ein Bild mit Gimp

Apache kann nicht auf die Datei zugreifen, obwohl sie die Berechtigung hat?

So konvertieren Sie Dateien in verschiedene Formate, ohne Software zu verwenden

Verwenden von vim, um die Bearbeitung einer Datei zu erzwingen, wenn Sie sie ohne Berechtigungen geöffnet haben