首頁 > php框架 > ThinkPHP > thinkphp5.1是否支援extra

thinkphp5.1是否支援extra

藏色散人
發布: 2022-12-12 09:38:30
原創
1932 人瀏覽過

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 使用檔案作為設定檔

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&#39;$key&#39;=>[\r\n";
                foreach ($value as $ikey=>$r) {
                    if(is_numeric($ikey)){
                        $str .= "\t\t&#39;$r&#39;,";
                        $str .= "\r\n";
                    }else{
                        $str .= "\t\t&#39;$ikey&#39; => &#39;$r&#39;,";
                        $str .= "\r\n";
                    }
                }
                $str = rtrim($str,&#39;,&#39;);
                $str .= "\t],"."\r\n";
            } else{
                $str .= "\t&#39;$key&#39; => &#39;$value&#39;,";
                $str .= "\r\n";
            }
        }
        $str .= &#39;];&#39;;
        //关闭文件
        $result = file_put_contents($filepath, $str);
        if($result){
            return &#39;success&#39;;
        } else {
            return $result;
        }
    } else {
        return &#39;error&#39;;
    }
}
登入後複製

將本段程式碼貼入app(或application)資料夾內的common.php中,即可全域使用該函數,進行修改設定檔.

範例:

在網站根目錄的config資料夾中建立一個business.php檔案(注意讀取和寫入權限),

控制器中呼叫修改函數

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

config資料夾下的配置檔案就會修改為

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

接下來,在其他控制器中,就可以直接使用config的法則來取得各種設定檔了,具體規則,請移步TP5.1手冊設定取得章節.

邏輯程式直接從檔案讀取配置,使用者讀取配置,可以設定快取或直接從redis讀取.

推薦學習:《thinkPHP影片教學

以上是thinkphp5.1是否支援extra的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板