废话:
网站查debug每次都要到服务器改文件嫌弃麻烦,想日一个动态修改.env文件的小功能
自己又懒惰,在网上找的代码,复制过来就开始用(能复制绝不手写)
复制的代码如下
public function language(){
$data=['lang'=>request('lang')];
$envPath = base_path() . DIRECTORY_SEPARATOR . '.env';
$contentArray = collect(file($envPath, FILE_IGNORE_NEW_LINES));
$contentArray->transform(function ($item) use ($data){
foreach ($data as $key => $value){
if(str_contains($item, $key)){
return $key . '=' . $value;
}
}
return $item;
});
$content = implode($contentArray->toArray(), "\n");
\File::put($envPath, $content);
return redirect()->back();
}
这个也说明了是修改语言用的,我没看就复制进去达到修改.env文件其他配置,测试的时候发现很漂亮可以用,我尝试改APP_NAME 一看也可以改,仔细一看
看了一下代码 感觉是这个函数引起的
str_contains()
str_contains: 判断字符串中是否包含特定的多个字符
包含了就换,修改带有NAME的配置全变成一样的,这样可不行的呀!修改后的代码是这样的,乱日了一下
//$data是要修改的内容
//$data=['APP_NAME'=>$input['APP_NAME'],'APP_URL'=>$input['APP_URL']]
$envPath = base_path() . DIRECTORY_SEPARATOR . '.env';
$contentArray = collect(file($envPath, FILE_IGNORE_NEW_LINES));
foreach ($contentArray as $key=>$value) {
if ($value == '') {
$key='';
} else {
$cont = explode('=', $value);
if (array_key_exists($cont[0], $data)) {
$contentArray[$key] = $cont[0].'='.$data[$cont[0]];
} else {
$contentArray[$key] = $cont[0].'='.$cont[1];
}
}
}
$content = implode($contentArray->toArray(),"\n");
\File::put($envPath, $content);
return redirect()->back();
这样就不会和上面的代码一样出错了