Perl CGI(Mason)を使用してxlsxファイルをpdfに変換しようとしています。
純粋なPerlを使用してファイルを変換する方法が見つからなかったため、これを使用してsoffice
作業を実行しました。
ブラウザでこれを行うまではうまくいきます。
変換を担当するコードは非常に簡単です。
my @cmd = ( "soffice", "--headless", "--convert-to", "pdf", $filename );
system(@cmd);
通常のユーザーが実行するとコマンドラインで正常に実行されますが、Apacheユーザー(ApacheのMason)として実行するとエラーが発生します。
(process:14954): dconf-CRITICAL **: 14:28:42.846: unable to create directory '/usr/share/httpd/.cache/dconf': Permission denied. dconf will not work properly.
誰もが正しい方向に私を指すことができますか?
システムコマンドの代わりにPerlだけを使用してxlsxをpdfに変換する方法はありますか?
編集する
エラーを伝えるためにdconf
苦情のあるディレクトリツリーを手動で作成し、それをApacheユーザーに渡しましたが、次のエラーが発生しました。
[Java framework] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx
私が試しても同じですunoconv
。
Error: Unable to connect or start own listener. Aborting.
解決策
unoconv --listener
操作する前に手動で起動すると問題が解決しました。 PDFファイルを作成しています。
答え1
このエラーは、Apacheがコマンドラインでこのスクリプトを実行したユーザーとは異なるユーザーとして実行されているために発生します。最近ではCGIを使用していません。 FastCGIで実行するようにMasonを設定しましょう。地獄、私もApacheを捨て、NGINXを使用します。この問題を解決するには、次のいずれかを実行する必要があります。
- 同じユーザーがディレクトリを所有するか、Apacheを実行しているユーザーが書き込むことができるようにディレクトリを作成します。 Apache は CGI プロセスを生成するため、スクリプトを実行するユーザーとは異なる権限があります。ファイルを見て
/etc/apache2/envvars
変数を確認APACHE_RUN_GROUP
し、APACHE_RUN_USER
- 使用数を実行
答え2
unoconv --listener
操作する前に手動で起動すると問題が解決しました。 PDFファイルを作成しています。