File tree 3 files changed +30
-5
lines changed
3 files changed +30
-5
lines changed Original file line number Diff line number Diff line change @@ -438,13 +438,13 @@ protected function getEnv($name)
438
438
if (isset ($ this ->envCache [$ name ]) || array_key_exists ($ name , $ this ->envCache )) {
439
439
return $ this ->envCache [$ name ];
440
440
}
441
- if (0 !== strpos ($ name , 'HTTP_ ' ) && isset ( $ _SERVER [ $ name ] )) {
441
+ if (isset ( $ _SERVER [ $ name ]) && 0 !== strpos ($ name , 'HTTP_ ' )) {
442
442
return $ this ->envCache [$ name ] = $ _SERVER [$ name ];
443
443
}
444
444
if (isset ($ _ENV [$ name ])) {
445
445
return $ this ->envCache [$ name ] = $ _ENV [$ name ];
446
446
}
447
- if (false !== $ env = getenv ($ name )) {
447
+ if (false !== ( $ env = getenv ($ name )) && null !== $ env ) { // null is a possible value because of thread safety issues
448
448
return $ this ->envCache [$ name ] = $ env ;
449
449
}
450
450
if (!$ this ->hasParameter ("env( $ name) " )) {
Original file line number Diff line number Diff line change @@ -70,13 +70,17 @@ public function populate($values)
70
70
unset($ loadedVars ['' ]);
71
71
72
72
foreach ($ values as $ name => $ value ) {
73
- if (!isset ($ loadedVars [$ name ]) && (isset ($ _ENV [$ name ]) || isset ($ _SERVER [$ name ]) || false !== getenv ($ name ))) {
73
+ $ notHttpName = 0 !== strpos ($ name , 'HTTP_ ' );
74
+ // don't check existence with getenv() because of thread safety issues
75
+ if (!isset ($ loadedVars [$ name ]) && (isset ($ _ENV [$ name ]) || (isset ($ _SERVER [$ name ]) && $ notHttpName ))) {
74
76
continue ;
75
77
}
76
78
77
79
putenv ("$ name= $ value " );
78
80
$ _ENV [$ name ] = $ value ;
79
- $ _SERVER [$ name ] = $ value ;
81
+ if ($ notHttpName ) {
82
+ $ _SERVER [$ name ] = $ value ;
83
+ }
80
84
81
85
$ loadedVars [$ name ] = true ;
82
86
}
@@ -363,7 +367,15 @@ private function resolveVariables($value)
363
367
}
364
368
365
369
$ name = $ matches [3 ];
366
- $ value = isset ($ this ->values [$ name ]) ? $ this ->values [$ name ] : (isset ($ _ENV [$ name ]) ? $ _ENV [$ name ] : (string ) getenv ($ name ));
370
+ if (isset ($ this ->values [$ name ])) {
371
+ $ value = $ this ->values [$ name ];
372
+ } elseif (isset ($ _SERVER [$ name ]) && 0 !== strpos ($ name , 'HTTP_ ' )) {
373
+ $ value = $ _SERVER [$ name ];
374
+ } elseif (isset ($ _ENV [$ name ])) {
375
+ $ value = $ _ENV [$ name ];
376
+ } else {
377
+ $ value = (string ) getenv ($ name );
378
+ }
367
379
368
380
if (!$ matches [2 ] && isset ($ matches [4 ])) {
369
381
$ value .= '} ' ;
Original file line number Diff line number Diff line change @@ -208,13 +208,26 @@ public function testServerSuperglobalIsNotOverriden()
208
208
public function testEnvVarIsNotOverriden ()
209
209
{
210
210
putenv ('TEST_ENV_VAR=original_value ' );
211
+ $ _SERVER ['TEST_ENV_VAR ' ] = 'original_value ' ;
211
212
212
213
$ dotenv = new DotEnv ();
213
214
$ dotenv ->populate (array ('TEST_ENV_VAR ' => 'new_value ' ));
214
215
215
216
$ this ->assertSame ('original_value ' , getenv ('TEST_ENV_VAR ' ));
216
217
}
217
218
219
+ public function testHttpVarIsPartiallyOverriden ()
220
+ {
221
+ $ _SERVER ['HTTP_TEST_ENV_VAR ' ] = 'http_value ' ;
222
+
223
+ $ dotenv = new DotEnv ();
224
+ $ dotenv ->populate (array ('HTTP_TEST_ENV_VAR ' => 'env_value ' ));
225
+
226
+ $ this ->assertSame ('env_value ' , getenv ('HTTP_TEST_ENV_VAR ' ));
227
+ $ this ->assertSame ('env_value ' , $ _ENV ['HTTP_TEST_ENV_VAR ' ]);
228
+ $ this ->assertSame ('http_value ' , $ _SERVER ['HTTP_TEST_ENV_VAR ' ]);
229
+ }
230
+
218
231
public function testMemorizingLoadedVarsNamesInSpecialVar ()
219
232
{
220
233
// Special variable not exists
You can’t perform that action at this time.
0 commit comments