LaTeXドキュメント(www-data)が必要なパッケージにアクセスできない場合、PHPにLaTeXドキュメントをコンパイルする方法はありますか?


Answers

あなたはsudoアイデアはsudoませんが、パスワードの問題を回避するには単純な解決策があります。

www-dataはsudoersリスト、 etc/sudoersになければなりません。このリストの中でスーパーコマンドの制御方法を定義することができます。 www-データをパスワードを必要としないsudoerとして設定することは可能ですが、それはセキュリティの点で非常に巧妙な考えではありません。 したがって、sudoersリストでは、ユーザーが実行できるコマンドを指定できます。 /usr/bin/latexmkコマンドだけを許可すると、セキュリティ上の問題が回避され、Webサーバーはパスワードなしでスーパーコマンドを実行できます。

Ubuntuのヘルプページ( https://help.ubuntu.com/community/Sudoers) - 特にNOPASSWDセクションをご覧ください

あなたの場合の例は次のようになります:

# This lets "www-data" user run a command without a password
www-data mark-computer= NOPASSWD: /usr/bin/latexmk
Question

私はLaTeXドキュメントをコンパイルするPHPスクリプトを以下のように使用しています:

exec('cd /path/to/doc && /usr/bin/latexmk -pdf filename.tex');

これは私のLaTeXドキュメントのいくつかで動作していますが、私の最新のドキュメントはコンパイルされず、ログを見ると明らかになります:

!pdfTeX error: pdflatex (file ecrm1000): Font ecrm1000 at 600 not found
==> Fatal error occurred, no output PDF file produced!

私が見つけたのは、LaTeXが必要なフォントパッケージを見ることができないという結果です。 自分のユーザ名の下で同じコンパイルコマンドを実行すると、ドキュメントはコンパイルされます。 だから私の質問は、PHPを(wwwデータとして実行して)必要なLaTeXパッケージにアクセスするにはどうしたらいいですか?

私は以下を使ってwww-dataアカウントの下に必要なパッケージをインストールしようとしました:

sudo -u www-data sudo apt-get install texlive-fonts-recommended

それは私が設定したと信じていないwwwデータのパスワードを要求し、私がそれに投げ込んだものではありません。

私はUbuntu 12.04を実行しています。




同様の問題が発生し、 pdflatexを呼び出すシェルスクリプトで$HOME環境変数を/var/wwwに設定することで解決しました(または、 www-datawww-dataフォルダはここでOKです)。 TeX.SXの詳細を参照してください。