Libreoffice-headlessをインストールし、通常のユーザーとしてシェルにログオンしたときにドキュメントを変換できます。
[root@desktop ~]# yum install libreoffice-headless
[root@desktop ~]# yum install libreoffice-writer
[root@desktop ~]# su NotionCommotion
sh-4.1$ /usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc
convert /tmp/ayb/document_34.doc -> /tmp/ayb/document_34.pdf using writer_pdf_Export
同じことをしたいと思いますが、PHPを使用しているため、Apacheを使用しているため、次のコードではファイルは変換されません。
<?php
Shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
トラブルシューティングを行うために、ユーザーApacheと同じコマンドをシェルから実行しましたが、それでもファイルは変換されません。
[root@desktop ~]# su -s /bin/sh Apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
通常のユーザーとは異なり、Apacheには家がないので、変換を試みる前にHOME=/tmp/ayb
を使用して家を指定する必要があるかもしれないと聞きましたが、役に立ちません(CentOS 5.8を使用している場合、おそらく別のLibreOfficeのバージョンではありましたが、確かではありませんでした)。
ユーザーapacheとして実行するときにlibreofficeを使用してファイルをPDFに変換するにはどうすればよいですか?
インストールされているシステム:
CentOS 6.4
httpd.x86_64 2.2.15-28.el6.centos @updates
libreoffice-headless.x86_64 1:3.4.5.2-16.1.el6_3 @base
ここには2つの問題があります。 1つ目は、www-data
(Apacheユーザー)には$HOME
がないため、$HOME
が定義されていないとlibreofficeを実行できないことです。 2番目の問題は、この方法で特別に設定しない限り(そして本当にそうすべきではない場合)、Apache
がシステムの/tmp
ディレクトリにアクセスできないことです。 Webサーバーは通常、制限された環境で実行され、非常に有効なセキュリティ上の理由から、ファイルシステムへの完全なアクセス権はありません。
したがって、i)Apacheのユーザーにホームを提供し、ii)書き込みのためにアクセスできるディレクトリを提供する必要があります。したがって、Webページを格納するフォルダと同じフォルダにtmp
ディレクトリを作成して実行します。次のphp
コード:
<?php
Shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
私はテストしたところ、私のマシンで完全に動作しました。 ./tmp
の権限が777に設定されていることを確認してください。また、Aroudを使いすぎている場合は、Apacheを再起動する必要がある場合があります。しばらくして変更を加えたため、動作が停止し、再起動する必要がありました。
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
を取得し、それはサイレントに処理され、ユーザーの権限を修正する必要がありますか?