PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que putenv() é necessário em uma variável de ambiente já definida?


A razão é esta:

Os valores de ambiente que você obtém de getenv()[PHP] (a função php) são diferentes do ambiente que você consulta com getenv()[C] (a função C lib). O que getenv()[PHP] faz, está verificando com o sapi registrado para uma correspondência (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999 ).

O apache2 sapi faz isso por meio de seu próprio contexto de ambiente (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), não o ambiente padrão do sistema operacional do próprio processo apache.

SOMENTE quando não houver correspondência encontrada, ele verificará no ambiente do processo real. Então é por isso que getenv()[PHP] retorna um valor, mas getenv()[C] não.

Agora, o "hack" também é simples:putenv()[PHP] , armazena a chave/valor fornecido no ambiente do processo em execução, e é por isso que ele pode ser encontrado posteriormente por getenv()[c] .