GNU/Linux >> Belajar Linux >  >> Linux

Konversikan file ke PDF menggunakan LibreOffice di bawah user apache (yaitu saat menggunakan PHP)

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?


Linux
  1. Cara Mengatur Otentikasi Dasar di Apache menggunakan .htaccess

  2. Bagaimana mengkonversi file PPK ke PEM menggunakan Command

  3. Menggunakan Inotify Untuk Memantau Akses Ke File?

  1. Berikan akses sudo di RHEL dan CentOS

  2. Cara mengoptimalkan cache file statis Apache di Ubuntu 18.04

  3. Berikan Akses Sudo Pengguna (Tambahkan ke File Sudoers atau Grup Roda)

  1. Apa tujuan dari file .bash_profile di bawah Direktori Beranda Pengguna Di Linux?

  2. Log akses Apache secara otomatis mengatur izin

  3. lokasi file sementara saat menggunakan tmpfile() di C