在 Windows 中设置 Apache 特定的环境变量

在 Windows 中设置 Apache 特定的环境变量

我以前在 Ubuntu 中使用过 Apache。有一个envvars文件包含 Apache 服务使用的环境变量。我在 Windows 上找不到这样的文件。

我发现有两种方法可以解决这个问题。我发现 Apache 读取 Windows 环境变量。但我不喜欢这种方法,因为它们是全局的,而不是特定于应用程序的。

我发现的其他选项是创建一个 .bat 文件,设置环境变量,然后启动httpd.exe。但问题是它不适用于 Apache 服务。

我发现的另一种选择是使用国家安全监测中心。它允许使用服务特定的环境变量创建自定义服务。但AH00141: Could not initialize random number generator如果我使用它,就会出现错误。

还有其他我可以使用的替代选项吗?

答案1

您可以使用 Apache 中的 SetEnv 指令来设置特定于您的应用程序的环境变量。

更多详情请点击此处https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv 您可以将这些值放入虚拟主机或 httpd.conf 中

答案2

我最终编写了一个替换的包装器httpd.exe。我将其重命名httpd.exehttpd2.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 

相关内容