thinkphp5.1不支援extra,thinkphp5.1中config函數已經取消了extra的支援;可以將「function editConfig($arr = [] ,$user='admin'){...} 」程式碼貼入app或application資料夾內的common.php中即可全域使用該函數。
本教學操作環境:Windows7系統、ThinkPHP5版、Dell G3電腦。
thinkphp5.1是否支援extra?
不支援。
ThinkPHP5.1 使用檔案作為設定檔
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 => $value) { $conf[$key] = $value; } //记录修改者 $time = date('Y/m/d H:i:s'); $str = "<?php\r\n/**\r\n * 由".$user."修改.\r\n * $time\r\n */\r\nreturn [\r\n"; //写入配置文件 foreach ($conf as $key => $value) { if(is_array($value)){ $str.="\t'$key'=>[\r\n"; foreach ($value as $ikey=>$r) { if(is_numeric($ikey)){ $str .= "\t\t'$r',"; $str .= "\r\n"; }else{ $str .= "\t\t'$ikey' => '$r',"; $str .= "\r\n"; } } $str = rtrim($str,','); $str .= "\t],"."\r\n"; } else{ $str .= "\t'$key' => '$value',"; $str .= "\r\n"; } } $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" => [ "web_status"=>'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 [ 'WEB'=>[ 'web_status' => '1', '1', '3', '4', ], ];
接下來,在其他控制器中,就可以直接使用config的法則來取得各種設定檔了,具體規則,請移步TP5.1手冊設定取得章節.
邏輯程式直接從檔案讀取配置,使用者讀取配置,可以設定快取或直接從redis讀取.
推薦學習:《thinkPHP影片教學 》
以上是thinkphp5.1是否支援extra的詳細內容。更多資訊請關注PHP中文網其他相關文章!