我以前在 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.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