PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché putenv() è necessario su una variabile di ambiente già definita?

Il motivo è questo:

I valori dell'ambiente che ottieni da getenv()[PHP] (la funzione php) sono diversi dall'ambiente che interroghi con getenv()[C] (la funzione C lib). Cosa getenv()[PHP] fa, sta verificando con il sapi registrato una corrispondenza (http ://lxr.php.net/xref/PHP_5_6/ext/standard/basic_functions.c#3999 ).

apache2 sapi lo fa attraverso il proprio contesto ambientale (http://lxr.php.net/xref/PHP_5_6/sapi/apache2handler/sapi_apache2.c#253 ), non l'ambiente OS standard dal processo Apache stesso.

SOLO quando non viene trovata alcuna corrispondenza, verificherà nell'ambiente del processo effettivo. Ecco perché getenv()[PHP] restituisce un valore, ma getenv()[C] no.

Ora, anche l'"hack" è semplice:putenv()[PHP] , memorizza la chiave/valore specificata nell'ambiente del processo in esecuzione, motivo per cui può essere trovata in seguito da getenv()[c] .