Ich habe libreoffice-headless installiert und kann Dokumente konvertieren, wenn ich als normaler Benutzer in der Shell angemeldet bin.
[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
Ich möchte jetzt das Gleiche tun, aber mit PHP und daher als Benutzer-Apache wird die Datei jedoch im Folgenden nicht konvertiert.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
Bei dem Versuch, eine Fehlerbehebung durchzuführen, habe ich denselben Befehl über die Shell ausgeführt wie Benutzer-Apache, aber die Datei wird trotzdem nicht konvertiert:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Im Gegensatz zu normalen Benutzern hat Apache kein Zuhause, und ich erinnere mich, dass ich möglicherweise ein Zuhause angeben muss, HOME=/tmp/ayb
bevor ich versuche, es zu konvertieren, aber es hilft nicht (ich denke, wenn ich CentOS 5.8 und wahrscheinlich eine andere Version von LibreOffice verwende, ist es das tat, bin mir aber nicht sicher).
Wie konvertiere ich eine Datei mit libreoffice in PDF, wenn ich sie als Benutzer-Apache ausführe?
Installiertes System:
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
quelle
export HOME=/tmp/ayb libreoffice --headless ...
? Was ist der Zweck vonexport
und warum funktioniert es nichtHOME=/tmp/ayb; libreoffice --headless....
?/tmp
Sie dies tun. Aus Sicherheitsgründen ist es jedoch eine gute Idee, Ihrem Webserver keinen Zugriff auf Verzeichnisse zu gewähren, die sich außerhalb befinden/var/www
.export
Exportiert die Variable, stellt sie allen nachfolgenden Shells zur Verfügung und&&
stellt sicher, dass sie nur ausgeführt wird, wenn der Export erfolgreich war. Ich bin mir nicht sicher über die Details, Apache kann sehr pingelig in Bezug auf Berechtigungen sein, es ist immer besser, alles in Ihremwww
Ordner zu behalten ./tmp
, und eine gute Sache (glaube ich) bei der Verwendung ist, dass alte Dateien automatisch gelöscht werden. Aber andererseits sehe ich Ihren Standpunkt, alles unter Kontrolle zu halten/var/www
.libreoffice --headless
stirbt nachX11 connection rejected because of wrong authentication
Nachricht).Ich hatte ein ähnliches Problem mit Debian und habe es gelöst.
Führen Sie Ihren Befehl aus, aber mit
strace
am Anfang wie folgt:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Dadurch wird bei jedem Zugriff auf die System-API und deren Ergebnis eine riesige Protokolldatei erstellt.
In meinem Fall gab es irgendwo in der Nähe der Linie 5000 so etwas:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Im Anschluss an diese Spur, änderte ich Berechtigungen rekursiv für Ordner
/var/spool/libreoffice
zu777
.Danach begann die Konvertierung für jeden Benutzer zu funktionieren.
Vielleicht greifen Sie auch
Permission denied
auf eine andere Datei zu, die unbeaufsichtigt behandelt wird und Sie müssen die Berechtigungen für Ihren Benutzer festlegen?quelle