Я использовал Apache в Ubuntu в прошлом. Eсть envvars
файл содержит переменные среды, используемые службой Apache. Я не могу найти такой файл для Windows.
Я нашел два подхода, чтобы справиться с этим. Я обнаружил, что Apache читает переменные среды Windows. Но мне это не нравится, поскольку они глобальны, а не зависят от приложения.
Другой вариант, который я нашел, - это создание файла .bat, установка переменных env и запуск httpd.exe
. Но проблема в том, что он не работает с Apache Service.
Другой вариант, который я нашел, - использовать nssm. Это позволяет создавать настраиваемые службы с переменными среды, специфичными для службы. Но я получаю AH00141: Could not initialize random number generator
ошибка, если я его использую.
Есть ли другой альтернативный вариант, который я могу использовать?
Вы можете использовать директиву SetEnv в Apache для настройки собственных переменных среды, специфичных для вашего приложения.
Подробнее здесь https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv Вы можете поместить эти значения в свой виртуальный хост или httpd.conf
В итоге я написал обертку, которая заменила 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