thinkphp5.1是否支持extra

thinkphp5.1不支持extra,thinkphp5.1中config函数已经取消了extra的支持;可以将“function editConfig($arr = [] ,$user=’admin’){…}”代码贴入app或者application文件夹内的common.php中即可全局使用该函数。

thinkphp5.1是否支持extra

本教程操作环境:Windows7系统、ThinkPHP5版、Dell G3电脑。

thinkphp5.1是否支持extra?

不支持。

ThinkPHP5.1 使用文件作为配置文件

立即学习PHP免费学习笔记(深入)”;

ThinkPHP5.1 使用文件作为配置文件的踩坑记录

使用Tp5.1(版本限定)作为App后台的时候,用户频繁的请求,每一步操作都要访问数据库,每一步操作都要访问到 config 配置表,频繁的读取使数据库压力山大,在后台监控流量,发现将近30%的请求都是在访问config表,所以决定将配置固话到本地,使用文件作为配置.

但是查询多方资料,未能找到可以静态修改配置,Tp5.1提供的Config::set()函数只能动态的修改配置文件,而且仅限于本控制器内,实际配置文件并没有改变,这显然不符合我们的要求.

经查询多方资料后,发现这篇最为靠谱,但是实测无效,

进入config函数后,发现Tp5.1中,config函数已经取消了extra的支持,于是乎自己动手改写了一下

不多说,直接暴力上 代码.

/**  * 修改扩展配置文件  * @param array  $arr  需要更新或添加的配置  * @param string $user 修改人  * @return bool  */ function editConfig($arr = [] ,$user='admin') {     if (is_array($arr)) {         //获取文件名         $filename = 'business.php';         //获取配置文件环境变量位置(请确保开启权限,如若报错,请改为绝对路径)         $filepath = Env::get('CONFIG_PATH'). $filename;         //判定配置文件是否存在         if (!file_exists($filepath)  ) {             if(!fopen($filepath, "w")){                 return 'PermissionError1';             }         }         //判定权限是否足够         if (!is_writable($filepath)) {             return 'PermissionError2';         }         //遍历整个配置文件         $conf = include $filepath;         foreach ($arr as $key =&gt; $value) {             $conf[$key] = $value;         }         //记录修改者         $time = date('Y/m/d H:i:s');         $str = "<?php rn/**rn * 由".$user."修改.rn * $timern */rnreturn [rn";         //写入配置文件         foreach ($conf as $key => $value) {             if(is_array($value)){                 $str.="t'$key'=&gt;[rn";                 foreach ($value as $ikey=&gt;$r) {                     if(is_numeric($ikey)){                         $str .= "tt'$r',";                         $str .= "rn";                     }else{                         $str .= "tt'$ikey' =&gt; '$r',";                         $str .= "rn";                     }                 }                 $str = rtrim($str,',');                 $str .= "t],"."rn";             } else{                 $str .= "t'$key' =&gt; '$value',";                 $str .= "rn";             }         }         $str .= '];';         //关闭文件         $result = file_put_contents($filepath, $str);         if($result){             return 'success';         } else {             return $result;         }     } else {         return 'error';     } }

将本段代码贴入app(或者application)文件夹内的common.php中,即可全局使用该函数,进行修改配置文件.

范例:

在网站根目录的config文件夹中建立一个business.php文件(注意读写权限),

控制器中调用修改函数

  public function setBusiness(){         $arr = array(             "WEB" =&gt; [                 "web_status"=&gt;'1',                 1,3,4             ],         );         $result=editConfig($arr,'admin123');         if($result=='success'){             echo ('修改成功');         }elseif($result=='error'){             echo ('修改失败');         }         elseif($result=='PermissionError'){             echo ('文件无权限,请联系管理员');         }     }

config文件夹下的配置文件就会修改为

<?php /**  * 由admin123修改.  * 2019/11/22 13:00:27  */ return [ &#39;WEB&#39;=>[ 'web_status' =&gt; '1', '1', '3', '4', ], ];

接下来,在其他控制器中,就可以直接使用config的法则来获取各种配置文件了,具体规则,请移步TP5.1手册配置获取章节.

逻辑程序直接从文件读取配置,用户读取配置,可以设置缓存或者直接从redis里读取.

推荐学习:《thinkPHP视频教程

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享