Isso ocorre porque o Apache limpa as variáveis de ambiente antes de executar o processador cgi.
As únicas variáveis que ele deixa intactas são:
- CAMINHO
- PROMPT
- SystemRoot
- COMSPEC
- PATHEXT
- WINDIR
Ele também adiciona muitas variáveis específicas do Apache (como SCRIPT_NAME).
Portanto, a solução é usar algum tipo de wrapper (eu estou usando um Python cgi scrip, usando o normal W32 Python) que define algumas das variáveis antes de executar msys shell ou msys perl (o jeito certo de rodar o msys de fora é c:/path/to/sh.exe --login -c "perl /path/to/script.cgi"
).
As variáveis que precisam ser definidas (além daquelas que o Apache passa ou configura por si) são:
- LOGONSERVER =
\MACHINENAME
- TMP =
C:\Users\USERNAME\AppData\Local\Temp
O TMP não é necessário, mas o msys irá reclamar se não conseguir encontrá-lo.
Você pode usar qualquer diretório para o TMP, obviamente.
Não sei por que LOGONSERVER
é necessário, desculpe.
Certifique-se de que o script / aplicativo wrapper defina stdout para o modo binário, caso contrário, o Apache lançará um erro Premature end of script headers
.