ここには 2 つの問題があります。最初は www-data
です (Apache ユーザー) には $HOME
がありません $HOME
がない場合、libreoffice は実行できません。 定義されています。 2 番目の問題は、特にこのように設定しない限り (実際にそうすべきではありません)、 apache
システム /tmp
にアクセスできません ディレクトリ。 Web サーバーは通常、制限された環境で実行され、非常に正当なセキュリティ上の理由から、ファイル システムへの完全なアクセス権はありません。
したがって、i) apache のユーザーにホームを与え、ii) 書き込み用にアクセスできるディレクトリを与える必要があります。したがって、tmp
を作成します。 Web ページを保存しているフォルダーと同じフォルダーにディレクトリを作成し、次の php
を実行します。 コード:
<?php
shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
テストしたところ、私のマシンで完全に動作します。 ./tmp
を確認してください パーミッションは 777 に設定されています。変更を加えてからしばらくすると動作しなくなり、再起動する必要がありました。
Debianでも同様の問題があり、解決しました。
コマンドを実行しますが、strace
を使用します 最初に、次のようにします。
strace -f -o output.txt soffice --headless --convert-to pdf (...)
これにより、システム API へのすべてのアクセスとその結果を含む巨大なログ ファイルが生成されます。
私の場合、5000 行付近に次のようなものがありました。
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
このトレイルに続いて、フォルダー /var/spool/libreoffice
のアクセス許可を再帰的に変更しました 777
まで .
その後、すべてのユーザーに対して変換が機能し始めました。
Permission denied
も取得する可能性があります 他のファイルではサイレントに処理され、ユーザーのアクセス許可を修正する必要がありますか?