abort if (!is_file($env_file_target)) { $status = 3; return $status; } // cannot open file -> abort if (($fp = fopen($env_file_target, 'r')) === false) { $status = 2; return $status; } // set to readable but not yet any data loaded $status = 1; $block = false; $var = ''; while ($line = fgets($fp)) { // main match for variable = value part if (preg_match("/^\s*([\w_.]+)\s*=\s*((\"?).*)/", $line, $matches)) { $var = $matches[1]; $value = $matches[2]; $quotes = $matches[3]; // wirte only if env is not set yet, and write only the first time if (empty($_ENV[$var])) { if (!empty($quotes)) { // match greedy for first to last so we move any " if there are if (preg_match('/^"(.*[^\\\])"/U', $value, $matches)) { $value = $matches[1]; } else { // this is a multi line $block = true; // first " in string remove // add removed new line back because this is a multi line $value = ltrim($value, '"') . PHP_EOL; } } // if block is set, we strip line of slashes $_ENV[$var] = $block === true ? stripslashes($value) : $value; // set successful load $status = 0; } } elseif ($block === true) { // read line until there is a unescaped " // this also strips everything after the last " if (preg_match("/(.*[^\\\])\"/", $line, $matches)) { $block = false; // strip ending " and EVERYTHING that follows after that $line = $matches[1]; } // strip line of slashes $_ENV[$var] .= stripslashes($line); } } fclose($fp); return $status; } // __END__