3

(php exec() コマンドを使用して) FOP を実行しようとしています。コマンド ラインで (ユーザーとして) FOP を実行すると、完全に正常に動作しますが、PHP コマンドは apache の www-data ユーザーとして実行しています。 FOPが見つからないと言っています。

コマンドラインで sudo -uwww-data fop を使用して実行すると、コマンドが見つからないというメッセージも表示されます。

fop パス情報を /etc/profile とともに /etc/environment に入れ、ソース /etc/environment とソース /etc/profile を実行しましたが、まだ見つからないと表示されます。

FOP を www-data ユーザーの下で実行するにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

次のコードを like という名前のファイルに入れるの/etc/profile.d/*.shは、目標を達成するための恐ろしい方法ですが、うまくいくかもしれません:

#/bin/sh
if [ "`id -u`" -eq "`id -u www-data`" ]; then
   PATH="/opt/fop/latest:$PATH" ;
fi

現在のユーザー ID がwww-data-user の ID であるかどうかをテストします。その場合、PATH変数の先頭に/opt/fop/latestディレクトリを追加します。新しいシェルが初期化されるたびに、自動的に実行される必要があります。

これらのコマンドは、新しいスクリプトをインストールします。

$ echo -e '#!/bin/sh\nif [ "`id -u`" -eq "`id -u www-data`" ]; then PATH="/opt/fpb/latest:$PATH"; fi' | sudo cat >/etc/profile.d/fop4www-data.sh
$ sudo chown www-data:www-data /etc/profile.d/fop4www-data.sh
$ sudo -u www-data chmod +x /etc/profile.d/fop4www-data.sh

コマンドの場合

$ echo 'whoami; echo PATH=$PATH' | sudo -u www-data sh

fop通常のシェルから実行すると変更が反映され、php スクリプトから呼び出すことができるはずです。

免責事項:私はシェルプログラミングにはあまり興味がありません。私は自分が何をしているのかほとんどわかりません。常識を働かせてコードを改善してください。

于 2012-07-29T20:16:01.900 に答える