thinkphp6动态修改.env配置
2022-11-24 11:10:29
201
{{single.collect_count}}

直接贴方法吧:

首先例如修改下图配置

 已知值$val=array(1,2,3);

需要修改上图的值limitonegoods为$val

 $val=json_encode($val,JSON_UNESCAPED_UNICODE);Env::offsetSet('USERGOODS.LIMITONEGOODS',$val); $envPath = root_path() . DIRECTORY_SEPARATOR . '.env';// $envinidata=ksort(Env::get()); $envinidata=Env::get(); $envinidata=$this->arr_to_iniarr($envinidata); $inicontent=$this->arr_trinsform_ini($envinidata); $fp = fopen($envPath, "w") or die("Couldn't open $envPath"); fputs($fp,$inicontent);fclose($fp);

下面写入方法

 /** * author:leishaofa * date:20191225 * effect:ini数组分割处理 */function arr_to_iniarr(array $a, array $parent = array()){$out = [];foreach ($a as $k => $v){$key=explode('_',$k);if(count($key)>1 && !in_array($key[0],$out)){$out[]=$key[0];unset($key);}}return $out;}
/** * author:leishaofa * date:20191225 * effect:ini数据组装*/function arr_trinsform_ini(array $a, array $parent = array()){$out = ''.PHP_EOL;foreach ($a as $k => $v) {if (is_array($v)) {$sec = array_merge((array) $parent, (array) $k);$out .= '[' . join('.', $sec) . ']' . PHP_EOL;$out .= arr_trinsform_ini($v, $sec);}else { if(empty($v)){$out .=PHP_EOL.PHP_EOL;$out .=$k.PHP_EOL;}else{$out .= "$k = $v" . PHP_EOL;}}}return $out;}

上面有没有错误有没有,是有的怎么优化呢

 优化后

 $val=json_encode($val,JSON_UNESCAPED_UNICODE);Env::offsetSet('USERGOODS.LIMITONEGOODS',$val);$envPath = root_path() . DIRECTORY_SEPARATOR . '.env'; // $envinidata=ksort(Env::get());$envinidata=Env::get();$inicontent=self::arr_trinsform_ini($envinidata);print_r(Env::get());print_r($inicontent);$fp = fopen($envPath, "w") or die("Couldn't open $envPath");fputs($fp,$inicontent); fclose($fp);/** * author:leishaofa * date:20191225 * effect:ini数据组装*/function arr_trinsform_ini(array $a, array $parent = array()){$out = ''.PHP_EOL;$keysindent=[];foreach ($a as $k => $v) {if (is_array($v)) {$sec = array_merge((array) $parent, (array) $k);$out .= '[' . join('.', $sec) . ']' . PHP_EOL;$out .= arr_trinsform_ini($v, $sec);}else {$key=explode('_',$k);if(count($key)>1 && !in_array($key[0],$keysindent)){$keysindent[]=$key[0];$out .=PHP_EOL.PHP_EOL;$out .="[$key[0]]".PHP_EOL;unset($key[0]);$out .= implode('_',$key)." = $v" . PHP_EOL;//unset($key);}elseif (count($key)>1 && in_array($key[0],$keysindent)){unset($key[0]);$out .= implode('_',$key)." = $v" . PHP_EOL;}else{$out .= "$k = $v" . PHP_EOL;}}}return $out;}

同时建议在里面加一个版本,修改通过获取版本号来判断文件是否存在,这个代码我就不贴出来了

 至于上面$envinidata=ksort(Env::get());用不用那我觉得看里面配置,如果在顶上面加了没分组的标识建议不要使用排序例如下图

上面多个了timelimitpage = 1没有分组就不能使用排序

重要函数:parse_ini_file

还有可能有些人喜欢配置存session里面,看喜好,但是我还是赞同存配置里面

 

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}