sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför behövs putenv() på en redan definierad miljövariabel?

Anledningen är detta:

Miljövärdena du får från getenv()[PHP] (php-funktionen) skiljer sig från miljön du frågar med getenv()[C] (C lib-funktionen). Vad getenv()[PHP] gör, kontrollerar med den registrerade sapi efter en matchning (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999 ).

Apache2 sapi gör detta genom sin egen miljökontext (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), inte standard OS-miljön från själva apacheprocessen.

ENDAST när det inte finns någon matchning, kommer den att kontrollera miljön för den faktiska processen. Så det är därför getenv()[PHP] returnerar ett värde, men getenv()[C] inte.

Nu är "hacket" också enkelt:putenv()[PHP] , lagrar den givna nyckeln/värdet i miljön för den pågående processen, varför den kan hittas senare av getenv()[c] .




  1. Återställ en SQL Server-databas (T-SQL)

  2. Välj en specifik kund i MYSQL?

  3. Hibernate, MySQL och tabell med namnet Repeat - konstigt beteende

  4. Välj rader från en tabell där rad i en annan tabell med samma id har ett speciellt värde i en annan kolumn