您好,登錄后才能下訂單哦!
本篇文章和大家了解一下thinkphp5.1支不支持extra。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
thinkphp5.1不支持extra,thinkphp5.1中config函數已經取消了extra的支持;可以將“function editConfig($arr = [] ,$user='admin'){...}”代碼貼入app或者application文件夾內的common.php中即可全局使用該函數。
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里讀取.
以上就是thinkphp5.1支不支持extra的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。