2015-09-07 70 views
1

我正在嘗試編寫一個腳本,它從.env文件中提取內部版本號,並將其添加到1並將其保存回該文件。我目前有下面的代碼,但我不知道如何將其保存迴文件。任何幫助?試圖更改.env文件中的值

$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" 
+1

你要重新創建的字符串'$ env'然後用'file_put_contents()'寫回文件。你有一個'get_string_between()'函數,爲什麼不做'get_string_before()'和'get_string_after()'函數,以及'$ env = get_string_before(...)+ $ parsed + get_string_after(...); ' – Tro

回答

0

事實證明,我只是做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; 
} 
0

試試這個:

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

嘗試這樣

$string = 'build(32)'; 
$pattern = '/build\\(([\\d]{2})\\)/'; 
echo preg_replace_callback($pattern, 'call', $string); 

function call($v) 
{ 
    return 'build('.($v[1]+1).')'; 
} 
0

也許我過複雜的事情,但你的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); 

?>