The Windows agent config template was missing the active
UserParameterDir=${ZBX_USERPARAMETERDIR} line. The Windows agent Dockerfile
sets ZBX_USERPARAMETERDIR and creates the C:\zabbix\user_scripts directory,
but because the option is never written to the config, user parameter scripts
placed there are not loaded by the agent.
The Linux agent, Linux agent2, and Windows agent2 templates all set this
option; only the Windows agent template was missing it. Add it to match.
The web config redesign changed the HTTP-auth lookup from
getenv('ZBX_ALLOW_HTTP_AUTH') to env_bool('ALLOW_HTTP_AUTH', true),
dropping the ZBX_ prefix. The entrypoint (php.sh) still sets and exports
ZBX_ALLOW_HTTP_AUTH, and every web image README documents ZBX_ALLOW_HTTP_AUTH,
so the frontend now reads a variable that is never set and always falls back
to the default (true).
As a result, setting ZBX_ALLOW_HTTP_AUTH=false no longer disables HTTP
authentication in the frontend. Restore the documented variable name.
env_string('DB_SERVER_PORT') returns '' when the variable is unset, and that
empty string is passed to mysqli::real_connect()'s ?int $port argument in
MysqlDbBackend::connect(), throwing a fatal TypeError under PHP 8 that breaks
every frontend page (HTTP 500) on socket / no-port setups. Regressed in the
web config redesign, which replaced getenv() (returns false -> int 0) with
env_string() (returns '').
Add an env_int() helper that maps both unset and empty to the default and
returns an int, and use it for the DB port.