Saya menginstal libreoffice-headless dan dapat mengkonversi dokumen ketika masuk ke shell sebagai pengguna normal.
[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
Saya sekarang ingin melakukan hal yang sama, tetapi menggunakan PHP dan karenanya sebagai apache pengguna, bagaimanapun, berikut ini tidak akan mengkonversi file.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
Dalam upaya memecahkan masalah, saya menjalankan perintah yang sama melalui shell sebagai apache pengguna, tetapi tetap saja tidak akan mengonversi file:
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Apache tidak seperti pengguna normal yang tidak memiliki rumah, dan saya ingat pernah mendengar saya mungkin perlu menentukan rumah menggunakan HOME=/tmp/ayb
sebelum mencoba untuk mengkonversi, tetapi itu tidak membantu (saya pikir ketika menggunakan CentOS 5.8 dan mungkin versi LibreOffice yang berbeda, itu lakukan, tetapi saya tidak yakin).
Bagaimana cara mengonversi file ke PDF menggunakan libreoffice saat menjalankannya sebagai apache pengguna?
Sistem yang diinstal:
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
sumber
export HOME=/tmp/ayb libreoffice --headless ...
berhasil? Apa tujuanexport
dan mengapa tidakHOME=/tmp/ayb; libreoffice --headless....
berhasil?/tmp
Anda, Anda bebas untuk melakukannya. Namun, itu adalah ide yang baik dari sudut pandang keamanan untuk tidak memberikan akses server web Anda ke direktori yang ada di luar/var/www
.export
mengekspor variabel, membuatnya tersedia untuk semua shell berikutnya dan&&
memastikan itu berjalan hanya jika ekspor berhasil. Saya tidak yakin tentang perinciannya, apache bisa sangat rewel tentang izin, selalu lebih baik menyimpan semuanya diwww
folder Anda ./tmp
, dan hal yang baik (saya pikir) tentang menggunakannya adalah secara otomatis membersihkan file lama. Tapi sekali lagi, saya mengerti maksud Anda tentang menjaga segala sesuatu di bawah/var/www
.libreoffice --headless
mati setelahX11 connection rejected because of wrong authentication
pesan).Saya memiliki masalah serupa pada Debian dan saya menyelesaikannya.
Jalankan perintah Anda, tetapi dengan
strace
di awal, seperti ini:strace -f -o output.txt soffice --headless --convert-to pdf (...)
Ini akan menghasilkan file log besar dengan setiap akses ke sistem API dan hasilnya.
Dalam kasus saya, di suatu tempat dekat garis 5000 ada sesuatu seperti ini:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
Mengikuti jejak ini, saya mengubah hak akses secara rekursif untuk folder
/var/spool/libreoffice
untuk777
.Setelah itu, konversi mulai berfungsi untuk setiap pengguna.
Mungkin Anda juga mendapatkan
Permission denied
beberapa file lain, ditangani diam-diam, dan Anda perlu memperbaiki izin untuk pengguna Anda?sumber