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