ada dua masalah disini. Yang pertama adalah www-data
(pengguna apache) tidak memiliki $HOME
jadi libreoffice tidak bisa dijalankan jika tidak ada $HOME
didefinisikan. Masalah kedua adalah, kecuali jika Anda secara khusus mengaturnya dengan cara ini (dan Anda benar-benar tidak seharusnya), apache
tidak memiliki akses ke sistem /tmp
direktori. Server web biasanya berjalan di lingkungan terbatas dan tidak memiliki akses penuh ke sistem file karena alasan keamanan yang sangat valid.
Jadi, Anda perlu i) memberi pengguna apache rumah dan ii) memberinya direktori yang dapat diaksesnya untuk menulis. Jadi, buat tmp
direktori di folder yang sama tempat Anda menyimpan halaman web Anda dan kemudian menjalankan php
berikut kode:
<?php
shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
Saya baru saja menguji dan berfungsi dengan baik di mesin saya. Pastikan ./tmp
Anda memiliki izin yang disetel ke 777. Selain itu, Anda mungkin perlu me-restart apache jika Anda terlalu sering memainkannya. Itu berhenti bekerja untuk saya setelah beberapa saat ketika saya membuat perubahan dan saya perlu memulai ulang.
Saya memiliki masalah serupa di 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 API sistem dan hasilnya.
Dalam kasus saya, di 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 izin secara rekursif untuk folder /var/spool/libreoffice
ke 777
.
Setelah itu, konversi mulai berfungsi untuk setiap pengguna.
Mungkin Anda juga mendapatkan Permission denied
pada beberapa file lain, ini ditangani secara diam-diam, dan Anda perlu memperbaiki izin untuk pengguna Anda?