@@ -183,6 +183,8 @@ private function lexValue()
183
183
throw $ this ->createFormatException ('Whitespace are not supported before the value ' );
184
184
}
185
185
186
+ $ loadedVars = array_flip (explode (', ' , isset ($ _SERVER ['SYMFONY_DOTENV_VARS ' ]) ? $ _SERVER ['SYMFONY_DOTENV_VARS ' ] : (isset ($ _ENV ['SYMFONY_DOTENV_VARS ' ]) ? $ _ENV ['SYMFONY_DOTENV_VARS ' ] : '' )));
187
+ unset($ loadedVars ['' ]);
186
188
$ v = '' ;
187
189
188
190
do {
@@ -224,8 +226,8 @@ private function lexValue()
224
226
++$ this ->cursor ;
225
227
$ value = str_replace (['\\" ' , '\r ' , '\n ' ], ['" ' , "\r" , "\n" ], $ value );
226
228
$ resolvedValue = $ value ;
227
- $ resolvedValue = $ this ->resolveVariables ($ resolvedValue );
228
- $ resolvedValue = $ this ->resolveCommands ($ resolvedValue );
229
+ $ resolvedValue = $ this ->resolveVariables ($ resolvedValue, $ loadedVars );
230
+ $ resolvedValue = $ this ->resolveCommands ($ resolvedValue, $ loadedVars );
229
231
$ resolvedValue = str_replace ('\\\\' , '\\' , $ resolvedValue );
230
232
$ v .= $ resolvedValue ;
231
233
} else {
@@ -247,8 +249,8 @@ private function lexValue()
247
249
}
248
250
$ value = rtrim ($ value );
249
251
$ resolvedValue = $ value ;
250
- $ resolvedValue = $ this ->resolveVariables ($ resolvedValue );
251
- $ resolvedValue = $ this ->resolveCommands ($ resolvedValue );
252
+ $ resolvedValue = $ this ->resolveVariables ($ resolvedValue, $ loadedVars );
253
+ $ resolvedValue = $ this ->resolveCommands ($ resolvedValue, $ loadedVars );
252
254
$ resolvedValue = str_replace ('\\\\' , '\\' , $ resolvedValue );
253
255
254
256
if ($ resolvedValue === $ value && preg_match ('/\s+/ ' , $ value )) {
@@ -301,7 +303,7 @@ private function skipEmptyLines()
301
303
}
302
304
}
303
305
304
- private function resolveCommands ($ value )
306
+ private function resolveCommands ($ value, $ loadedVars )
305
307
{
306
308
if (false === strpos ($ value , '$ ' )) {
307
309
return $ value ;
@@ -317,7 +319,7 @@ private function resolveCommands($value)
317
319
)
318
320
/x ' ;
319
321
320
- return preg_replace_callback ($ regex , function ($ matches ) {
322
+ return preg_replace_callback ($ regex , function ($ matches ) use ( $ loadedVars ) {
321
323
if ('\\' === $ matches [1 ]) {
322
324
return substr ($ matches [0 ], 1 );
323
325
}
@@ -332,7 +334,15 @@ private function resolveCommands($value)
332
334
333
335
$ process = new Process ('echo ' .$ matches [0 ]);
334
336
$ process ->inheritEnvironmentVariables (true );
335
- $ process ->setEnv ($ this ->values );
337
+
338
+ $ env = [];
339
+ foreach ($ this ->values as $ name => $ value ) {
340
+ if (isset ($ loadedVars [$ name ]) || (!isset ($ _ENV [$ name ]) && !(isset ($ _SERVER [$ name ]) && 0 !== strpos ($ name , 'HTTP_ ' )))) {
341
+ $ env [$ name ] = $ value ;
342
+ }
343
+ }
344
+ $ process ->setEnv ($ env );
345
+
336
346
try {
337
347
$ process ->mustRun ();
338
348
} catch (ProcessException $ e ) {
@@ -343,7 +353,7 @@ private function resolveCommands($value)
343
353
}, $ value );
344
354
}
345
355
346
- private function resolveVariables ($ value )
356
+ private function resolveVariables ($ value, array $ loadedVars )
347
357
{
348
358
if (false === strpos ($ value , '$ ' )) {
349
359
return $ value ;
@@ -359,7 +369,7 @@ private function resolveVariables($value)
359
369
(?P<closing_brace>\})? # optional closing brace
360
370
/x ' ;
361
371
362
- $ value = preg_replace_callback ($ regex , function ($ matches ) {
372
+ $ value = preg_replace_callback ($ regex , function ($ matches ) use ( $ loadedVars ) {
363
373
// odd number of backslashes means the $ character is escaped
364
374
if (1 === \strlen ($ matches ['backslashes ' ]) % 2 ) {
365
375
return substr ($ matches [0 ], 1 );
@@ -375,14 +385,16 @@ private function resolveVariables($value)
375
385
}
376
386
377
387
$ name = $ matches ['name ' ];
378
- if (isset ($ this ->values [$ name ])) {
388
+ if (isset ($ loadedVars [ $ name ]) && isset ( $ this ->values [$ name ])) {
379
389
$ value = $ this ->values [$ name ];
380
- } elseif (isset ($ _SERVER [$ name ]) && 0 !== strpos ($ name , 'HTTP_ ' )) {
381
- $ value = $ _SERVER [$ name ];
382
390
} elseif (isset ($ _ENV [$ name ])) {
383
391
$ value = $ _ENV [$ name ];
392
+ } elseif (isset ($ _SERVER [$ name ]) && 0 !== strpos ($ name , 'HTTP_ ' )) {
393
+ $ value = $ _SERVER [$ name ];
394
+ } elseif (isset ($ this ->values [$ name ])) {
395
+ $ value = $ this ->values [$ name ];
384
396
} else {
385
- $ value = ( string ) getenv ( $ name ) ;
397
+ $ value = '' ;
386
398
}
387
399
388
400
if (!$ matches ['opening_brace ' ] && isset ($ matches ['closing_brace ' ])) {
0 commit comments