thinkphp5.1是否支持extra

thinkphp5.1不支持extra,thinkphp5.1中config函數(shù)已經(jīng)取消了extra的支持;可以將“function editConfig($arr = [] ,$user=’admin’){…}”代碼貼入app或者application文件夾內(nèi)的common.php中即可全局使用該函數(shù)。

thinkphp5.1是否支持extra

本教程操作環(huán)境:Windows7系統(tǒng)、ThinkPHP5版、Dell G3電腦。

thinkphp5.1是否支持extra?

不支持。

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

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

ThinkPHP5.1 使用文件作為配置文件的踩坑記錄

使用Tp5.1(版本限定)作為App后臺(tái)的時(shí)候,用戶頻繁的請(qǐng)求,每一步操作都要訪問(wèn)數(shù)據(jù)庫(kù),每一步操作都要訪問(wèn)到 config 配置表,頻繁的讀取使數(shù)據(jù)庫(kù)壓力山大,在后臺(tái)監(jiān)控流量,發(fā)現(xiàn)將近30%的請(qǐng)求都是在訪問(wèn)config表,所以決定將配置固話到本地,使用文件作為配置.

但是查詢多方資料,未能找到可以靜態(tài)修改配置,Tp5.1提供的Config::set()函數(shù)只能動(dòng)態(tài)的修改配置文件,而且僅限于本控制器內(nèi),實(shí)際配置文件并沒(méi)有改變,這顯然不符合我們的要求.

經(jīng)查詢多方資料后,發(fā)現(xiàn)這篇最為靠譜,但是實(shí)測(cè)無(wú)效,

進(jìn)入config函數(shù)后,發(fā)現(xiàn)Tp5.1中,config函數(shù)已經(jīng)取消了extra的支持,于是乎自己動(dòng)手改寫了一下

不多說(shuō),直接暴力上 代碼.

/** ?*?修改擴(kuò)展配置文件 ?*?@param?array??$arr??需要更新或添加的配置 ?*?@param?string?$user?修改人 ?*?@return?bool ?*/ function?editConfig($arr?=?[]?,$user='admin') { ????if?(is_array($arr))?{ ????????//獲取文件名 ????????$filename?=?'business.php'; ????????//獲取配置文件環(huán)境變量位置(請(qǐng)確保開(kāi)啟權(quán)限,如若報(bào)錯(cuò),請(qǐng)改為絕對(duì)路徑) ????????$filepath?=?Env::get('CONFIG_PATH').?$filename; ????????//判定配置文件是否存在 ????????if?(!file_exists($filepath)??)?{ ????????????if(!fopen($filepath,?"w")){ ????????????????return?'PermissionError1'; ????????????} ????????} ????????//判定權(quán)限是否足夠 ????????if?(!is_writable($filepath))?{ ????????????return?'PermissionError2'; ????????} ????????//遍歷整個(gè)配置文件 ????????$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?.=?'];'; ????????//關(guān)閉文件 ????????$result?=?file_put_contents($filepath,?$str); ????????if($result){ ????????????return?'success'; ????????}?else?{ ????????????return?$result; ????????} ????}?else?{ ????????return?'error'; ????} }

將本段代碼貼入app(或者application)文件夾內(nèi)的common.php中,即可全局使用該函數(shù),進(jìn)行修改配置文件.

范例:

在網(wǎng)站根目錄的config文件夾中建立一個(gè)business.php文件(注意讀寫權(quán)限),

控制器中調(diào)用修改函數(shù)

??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?('文件無(wú)權(quán)限,請(qǐng)聯(lián)系管理員'); ????????} ????}

config文件夾下的配置文件就會(huì)修改為

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

接下來(lái),在其他控制器中,就可以直接使用config的法則來(lái)獲取各種配置文件了,具體規(guī)則,請(qǐng)移步TP5.1手冊(cè)配置獲取章節(jié).

邏輯程序直接從文件讀取配置,用戶讀取配置,可以設(shè)置緩存或者直接從redis里讀取.

推薦學(xué)習(xí):《thinkPHP視頻教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享