私はUbuntuでApacheを使用したことがあります。 Apacheサービスで使用される環境変数を含むenvvars
ファイルがあります。 Windows用のそのようなファイルを見つけることができません。
私がそれに対処するために見つけた2つのアプローチがあります。 ApacheがWindows環境変数を読み取ることがわかりました。しかし、これらはグローバルであり、アプリケーション固有ではないため、私はこれが好きではありません。
私が見つけた他のオプションは、.batファイルを作成し、環境変数を設定してからhttpd.exe
を開始することです。しかし、これに伴う問題は、Apacheサービスでは機能しないことです。
私が見つけた別のオプションは、 nssm を使用することです。これにより、サービス固有の環境変数を使用してカスタムサービスを作成できます。しかし、使用するとAH00141: Could not initialize random number generator
エラーが発生します。
私が使用できる他の代替オプションはありますか?
httpd.exe
を置き換えるラッパーを作成することになりました。 httpd.exe
の名前をhttpd2.exe
に変更し、このラッパーhttpd.sh
を使用して実行しました。基本的に、Apacheサービスを開始する前に一時的にシステム環境変数を設定します。サービスが開始されると、それらは削除されます。
#!/bin/bash
PHP_INI_SCAN_DIR="C:\Server\PHP\7.0\conf;C:\Server\Config\PHP"
if [ "stop" == "$*" ]; then
exec /c/Server/Apache/bin/httpd2.exe -k stop
Elif [ "" == "$*" ]; then
export PHP_INI_SCAN_DIR
echo "Starting Apache in console mode"
/c/Server/Apache/bin/httpd2.exe
Elif [ "start" == "$*" ]; then
/bin/regtool set "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR" "$PHP_INI_SCAN_DIR" -s
/c/Server/Apache/bin/httpd2.exe -k start
/bin/regtool unset "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR"
Elif [ "restart" == "$*" ]; then
#/bin/regtool set "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR" "$PHP_INI_SCAN_DIR" -s
#/c/Server/Apache/bin/httpd2.exe -k stop
#/c/Server/Apache/bin/httpd2.exe -k start
#/bin/regtool unset "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR"
/c/Server/Apache/bin/httpd2.exe -k restart # ENV don't reload this way :(
else
/c/Server/Apache/bin/httpd2.exe "$*"
fi
ApacheでSetEnvディレクティブを使用して、アプリケーションに固有の独自の環境変数を設定できます。
詳細はこちら https://httpd.Apache.org/docs/2.4/mod/mod_env.html#setenv これらの値は仮想ホストまたはhttpd.conf内に置くことができます