PATHApache2 の環境変数はどのように設定できますか?私はそれを/usr/sbin/envvarshttpd.confで設定してSetEnv PATH(そしてPassEnvでSSIに渡す)試みましたが、それはうまくいきません。
PATHApache2 の環境変数はどのように設定できますか?私はそれを/usr/sbin/envvarshttpd.confで設定してSetEnv PATH(そしてPassEnvでSSIに渡す)試みましたが、それはうまくいきません。
回答:
他の人が言ったように、環境変数ファイルを使用してこれを行います。この回答で詳細を提供し、それが機能することを証明します。
この環境変数ファイルはからのソースでなければなりませんapachectl。私のUbuntuボックスでは、このファイルはにあり/etc/apache2/envvarsます。RedHatでは、これは/etc/sysconfig/httpdです。FreeBSDでは、これは/etc/rc.conf(私が思うに)設定されています。別の方法として、この情報をスタートアップスクリプト(/etc/init.d/httpdまたはapachectlなど)に設定することもできます。ただし、可能であれば、起動スクリプトをそのままにしておくのが最善だと思います。最適な場所は、指定された環境変数スクリプトです。
このenvvarsファイルの場所を確認します。Ubuntuでは、/etc/init.d/apache2ctlそれがソースであることを示しています/etc/apache2/envvars:
# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
. $APACHE_ENVVARS
fi
変数を表示するには、Perlのprintenv.cgiスクリプトを使用し、http://example.org/cgi-bin/printenv.cgiで利用できるようにしました。このスクリプトは、次のPATHを表示します。
PATH = /usr/local/bin:/usr/bin:/bin
これらの変数を変更するには、envvarsファイルを編集します。
$ sudo vim /etc/apache2/envvars
このファイルのPATHを変更します。この例では/opt/local/bin、PATHに追加します。いくつかのケースでは、あなたが使用する必要があるかもしれexport PATHないだけにしてPATH:
export PATH=$PATH:/opt/local/bin
Apacheを再起動します
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
http://example.org/cgi-bin/printenv.cgiの結果を見ると、PATHに新しい要素が含まれていることがわかります。
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
上記が機能しない場合は、何か異常なことが起こっている可能性があります。おそらく、スクリプトがPATHを無視または上書きしている可能性があります。
gracefulしてみましたが、変更が有効になりませんでした。
2.2では、Setenvを使用してPATH環境変数を設定できません。
私のシステムでは、です/etc/apache2/envvars。
PATH
mod_envがロードされていることを確認してください。
正しい構文は(例)です。
SetEnv LD_LIBRARY_PATH /usr/local/lib
これは私のために働いた。
PATH
start()次のようなinitスクリプトの機能で設定できます。
start() {
echo -n $"Starting $prog: "
check13 || exit 1
export PATH=${PATH}:/var/ossec/bin
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
すべての環境変数をリストするPerlスクリプトを作成します。
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
に配置し/var/www/cgi-bin、チェックhttp://domain.com/cgi-bin/env.cgiすると、以下が表示されます。
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
--prefix=/usr --enable-layout=RedHatenvvarsファイルを使用してソースからコンパイルされたApache 2.4.xを使用するRedHatでは、にあります/usr/sbin/envvars。そのファイルに適切なPATHを設定すると、ApacheとPHPが認識できるようになります。
私はそれを決定するためにStefan Lasiewskiと同じアプローチを使用しました。以下のためのApache 2.4.12、/usr/sbin/envvarsファイルはのライン49に供給されます/usr/sbin/apachectl。
/usr/sbin/apachectl言及していない/etc/sysconfig/httpdが含まれ、代わりに:«このファイルは、もはやhttpdプロセスのための追加の環境変数を設定するために使用されます。systemdに置き換えられました。» paste.debian.net/361218
任意のエディターでApache2 plistファイルを編集します(vimを使用した例):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
plistファイルに次を追加します。
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
EnvironmentVariablesキーが既に存在する場合は、追加するだけです
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
に <dict>
注意:Mac OSX 10.11(EL Capitan)以降の場合、csrutil disableリブートしてCMD + Rを押した後にターミナルでコマンドを実行する必要があり、このファイルを編集できるようになります。
Apache2を再起動します
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
私のApache2システムでは、多くの訪問者が慎重にコンパイルされたスマイリー/絵文字のコレクションを略奪したいだけであることがわかったので、ディレクトリパスへのランダムに生成されたシンボリックリンクを使用することにしましたApache2変数。リンクを共有することは事実上不可能でした。
したがって、30分ごとに、cronは.htaccessファイルを書き換え、以下に示すようにSetEnvを含めるperlスクリプトを実行しました。
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
次に、PHPページの上部にあるように変数を読み取ります。ページの後半には、適切なスマイリーへのパスを作成するために使用される変数があります。
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
私のために働いて、それがあなたを助けることを願っています!
PATH