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?