LaTeXドキュメント(www-data)が必要なパッケージにアクセスできない場合、PHPにLaTeXドキュメントをコンパイルする方法はありますか?php
あなたは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
私は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-data
にwww-data
フォルダはここでOKです)。 TeX.SXの詳細を参照してください。