试图更改.env文件中的值


Trying to change a value in a .env file

我正试图编写一个脚本,从.env文件中获取构建号,向其添加1并将其保存回该文件。我目前有下面的代码,但我不知道如何将其保存回文件。任何帮助吗?

$env = file_get_contents('../app/config/.env');
function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}
if (strpos($env,'build(') !== false) {
    $parsed = get_string_between($env, "build(", ")");
    $parsed = $parsed++;
}

我的.env文件看起来像这样:

VERSION_NUMBER="v.1.0 build(32)"
ENVIRONMENT="alpha"

试试这个:

$handle = fopen('../app/config/.env', 'w');
$content = "VERSION_NUMBER='"v.1.0 build($parsed)'" 'n ENVIRONMENT='"alpha'" ";
fwrite($handle, $content);
fclose($handle);

结果是,我可以直接使用explode()并将它们链接在一起。

$env = file_get_contents('../app/config/.env');
function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}
if (strpos($env,'build(') !== false) {
    $parsed = get_string_between($env, "build(", ")");
    $data = explode($parsed, $env);
    $parsed = intval($parsed);
    $parsed++;
    $result = $data[0].$parsed.$data[1];
    echo $result;
}

试试

$string = 'build(32)';
$pattern = '/build''(([''d]{2})'')/';
echo preg_replace_callback($pattern, 'call', $string);
function call($v)
{
    return 'build('.($v[1]+1).')';
}

也许我把事情复杂化了,但是您的ENV文件看起来与INI文件完全相同。因此,我会这样写(解释在代码注释中):

<?php
# File path
$path = "../app/config/";
# ENV extension
$env = ".env";
# Parse ENV as INI file
$arr = parse_ini_file($path.$env);
# Get current version number
$num = preg_match("#'((.*?)')#i", $arr['VERSION_NUMBER'], $match);
# Add 1 to version number
$match[1]++;
# Replace version number
$arr['VERSION_NUMBER'] = preg_replace("#'((.*?)')#", "(".$match[1].")", $arr['VERSION_NUMBER']);
# Function that writes back to ENV file
function write_ini_file($assoc_arr, $path, $has_sections=FALSE) { 
    $content = ""; 
    if ($has_sections) { 
        foreach ($assoc_arr as $key=>$elem) { 
            $content .= "[".$key."]'n"; 
            foreach ($elem as $key2=>$elem2) { 
                if(is_array($elem2)) 
                { 
                    for($i=0;$i<count($elem2);$i++) 
                    { 
                        $content .= $key2."[] = '"".$elem2[$i]."'"'n"; 
                    } 
                } 
                else if($elem2=="") $content .= $key2." = 'n"; 
                else $content .= $key2." = '"".$elem2."'"'n"; 
            } 
        } 
    } 
    else { 
        foreach ($assoc_arr as $key=>$elem) { 
            if(is_array($elem)) 
            { 
                for($i=0;$i<count($elem);$i++) 
                { 
                    $content .= $key."[] = '"".$elem[$i]."'"'n"; 
                } 
            } 
            else if($elem=="") $content .= $key." = 'n"; 
            else $content .= $key." = '"".$elem."'"'n"; 
        } 
    } 
    if (!$handle = fopen($path, 'w')) { 
        return false; 
    }
    $success = fwrite($handle, $content);
    fclose($handle); 
    return $success; 
}
# Save data back to ENV file
write_ini_file($arr, $path.$env);
?>