Ignore comments at the end of line

If the variable value had no quotes a comment at the end of the line was
added to the variable.
Spaces between text and comment mark will be removed too

Old:
FOO=Test # Comment -> $_ENV['FOO'] = "Test # Comment"

New:
FOO=Test # Comment -> $_ENV['FOO'] = "Test"
This commit is contained in:
2022-06-09 09:17:21 +09:00
parent 1389d5c768
commit 0d3e10fe26
4 changed files with 47 additions and 2 deletions

View File

@@ -7,7 +7,7 @@
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
> >
<projectFiles> <projectFiles>
<directory name="src" /> <directory name="." />
<ignoreFiles> <ignoreFiles>
<directory name="vendor" /> <directory name="vendor" />
<directory name="test" /> <directory name="test" />

View File

@@ -6,6 +6,9 @@ namespace gullevek\dotEnv;
class DotEnv class DotEnv
{ {
/** @var string constant comment char, set to # */
private const COMMENT_CHAR = '#';
/** /**
* parses .env file * parses .env file
* *
@@ -72,6 +75,11 @@ class DotEnv
// add removed new line back because this is a multi line // add removed new line back because this is a multi line
$value = ltrim($value, '"') . PHP_EOL; $value = ltrim($value, '"') . PHP_EOL;
} }
} else {
// strip any quotes at end for unquoted single line
// an right hand spaces are removed too
$value = false !== ($pos = strpos($value, self::COMMENT_CHAR)) ?
rtrim(substr($value, 0, $pos)) : $value;
} }
// if block is set, we strip line of slashes // if block is set, we strip line of slashes
$_ENV[$var] = $block === true ? stripslashes($value) : $value; $_ENV[$var] = $block === true ? stripslashes($value) : $value;
@@ -95,5 +103,4 @@ class DotEnv
} }
} }
// __END__ // __END__

View File

@@ -25,12 +25,29 @@ final class DotEnvTest extends TestCase
'OTHER' => 'B IS B', 'OTHER' => 'B IS B',
'Complex' => 'A B \"D is F', 'Complex' => 'A B \"D is F',
'HAS_SPACE' => 'ABC', 'HAS_SPACE' => 'ABC',
'HAS_COMMENT_QUOTES_SPACE' => 'Comment at end with quotes and space',
'HAS_COMMENT_QUOTES_NO_SPACE' => 'Comment at end with quotes no space',
'HAS_COMMENT_NO_QUOTES_SPACE' => 'Comment at end no quotes and space',
'HAS_COMMENT_NO_QUOTES_NO_SPACE' => 'Comment at end no quotes no space',
'COMMENT_IN_TEXT_QUOTES' => 'Foo bar # comment in here',
'FAILURE' => 'ABC', 'FAILURE' => 'ABC',
'SIMPLEBOX' => 'A B C', 'SIMPLEBOX' => 'A B C',
'TITLE' => '1', 'TITLE' => '1',
'FOO' => '1.2', 'FOO' => '1.2',
'SOME.TEST' => 'Test Var', 'SOME.TEST' => 'Test Var',
'SOME.LIVE' => 'Live Var', 'SOME.LIVE' => 'Live Var',
'A_TEST1' => 'foo',
'A_TEST2' => '${TEST1:-bar}',
'A_TEST3' => '${TEST4:-bar}',
'A_TEST5' => 'null',
'A_TEST6' => '${TEST5-bar}',
'A_TEST7' => '${TEST6:-bar}',
'B_TEST1' => 'foo',
'B_TEST2' => '${TEST1:=bar}',
'B_TEST3' => '${TEST4:=bar}',
'B_TEST5' => 'null',
'B_TEST6' => '${TEST5=bar}',
'B_TEST7' => '${TEST6=bar}',
'Test' => 'A', 'Test' => 'A',
'TEST' => 'B', 'TEST' => 'B',
'LINE' => "ABC\nDEF", 'LINE' => "ABC\nDEF",

View File

@@ -4,12 +4,33 @@ OTHER="B IS B"
Complex="A B \"D is F" Complex="A B \"D is F"
# COMMENT # COMMENT
HAS_SPACE= "ABC"; HAS_SPACE= "ABC";
# COMMENT AT END
HAS_COMMENT_QUOTES_SPACE="Comment at end with quotes and space" # Comment QE
HAS_COMMENT_QUOTES_NO_SPACE="Comment at end with quotes no space"# Comment QES
HAS_COMMENT_NO_QUOTES_SPACE=Comment at end no quotes and space # Comment NQE
HAS_COMMENT_NO_QUOTES_NO_SPACE=Comment at end no quotes no space# Comment NQES
COMMENT_IN_TEXT_QUOTES="Foo bar # comment in here"
FAILURE = ABC FAILURE = ABC
SIMPLEBOX= A B C SIMPLEBOX= A B C
TITLE=1 TITLE=1
FOO=1.2 FOO=1.2
SOME.TEST=Test Var SOME.TEST=Test Var
SOME.LIVE=Live Var SOME.LIVE=Live Var
# VAR TESTS -
A_TEST1 = foo
A_TEST2 = ${TEST1:-bar} # TEST1 is set so the value of TEST2 = foo
A_TEST3 = ${TEST4:-bar} # TEST4 is not set so the value of TEST3 = bar
A_TEST5 = null
A_TEST6 = ${TEST5-bar} # TEST5 is set but empty so the value of TEST6 = null
A_TEST7 = ${TEST6:-bar} # TEST5 is set and empty so the value of TEST7 = bar
# VAR TESTS =
B_TEST1 = foo
B_TEST2 = ${TEST1:=bar} # TEST1 is set so the value of TEST2 = foo
B_TEST3 = ${TEST4:=bar} # TEST4 is not set so the value of TEST3 = bar and TEST4 = bar
B_TEST5 = null
B_TEST6 = ${TEST5=bar} # TEST5 is set but emtpy so the value of TEST6 = null
B_TEST7 = ${TEST6=bar} # TEST5 is set and empty so the value of TEST7 = bar and TEST5 = bar
# VAR TEST END
Test="A" Test="A"
TEST="B" TEST="B"
TEST="D" TEST="D"