Windows
在 Windows 中設置 Apache 特定的環境變數
我在 Ubuntu 中使用 Apache 已經是過去式了。有一個
envvars
文件包含 Apache 服務使用的環境變數。我無法為 Windows 找到這樣的文件。我發現有兩種方法可以處理它。我發現 Apache 讀取了 Windows 環境變數。但我不喜歡這樣,因為它們是全球性的,而不是特定於應用程序的。
我發現的其他選項是創建一個 .bat 文件,設置環境變數,然後啟動 .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