GNU/Linux >> Linux の 問題 >  >> Linux

ユーザーapacheの下でLibreOfficeを使用してファイルをPDFに変換します(つまり、PHPを使用する場合)

ここには 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 も取得する可能性があります 他のファイルではサイレントに処理され、ユーザーのアクセス許可を修正する必要がありますか?


Linux
  1. コマンドを使用してPPKをPEMファイルに変換する方法

  2. Inotifyを使用してファイルへのアクセスを監視しますか?

  3. Apache アクセス ログは自動的にアクセス許可を設定します

  1. .htaccessを使用してApacheで基本認証を設定する方法

  2. Ubuntu18.04でApache静的ファイルキャッシングを最適化する方法

  3. Linux シェルで rz と sz を使用する

  1. RHELおよびCentOSでsudoアクセスを許可する

  2. ユーザーに Sudo アクセスを許可する (Sudoers ファイルまたは Wheel グループに追加)

  3. Linuxのユーザーホームディレクトリの下にある.bash_profileファイルの目的は何ですか