關於thinkPHP架構動態配置的用法分析

來源:互聯網
上載者:User
這篇文章主要介紹了thinkPHP架構動態配置用法,結合執行個體形式分析了thinkPHP3.0之前的動態配置操作技巧及緩衝相關操作注意事項,需要的朋友可以參考下

本文執行個體講述了thinkPHP架構動態配置用法。分享給大家供大家參考,具體如下:

最近在用@ThinkPHP 做系統的時候,要用到一個功能,就要動態將系統的配置參數儲存到Config檔案中。以往,我們做系統的時候,項目的配置參數都會直接事先寫入到Config/Config.php檔案中,然後在項目中應用即可。但是,有些項目,使用者需要根據自己的情況將配置參數,通過後台動態來設定。這種動態參數配置,一般我們有兩種方式,一種是寫入到資料庫,另一種就是寫入到設定檔。今天,我來說說用設定檔的形式來實現這一功能。

一、設定檔設定

首先,我們在TP項目配置目錄Config下建立一個設定檔,命名為setting.config.php,這個檔案用以儲存動態參數。然後,項目主設定檔Config.php中用合并數組的方式,將setting.config.php合并進來。這樣,在整個項目中,即可調用setting.config.php中的配置參數了。

二、實現動態管理參數

在後台,建立一個功能,將setting.config.php的預設值讀出,並顯示在一個表單中。這裡可以使用TP的C函數實現。然後,即可在表單中對各個參數的值進行設定。表單提交儲存後,將表單提交的值,進行處理,具體代碼如下:

setting.config.php檔案的結構

<?phpreturn array(  'setting'=>array(    'tel' => '400-088-7380',        'qq'  => '88888888',        ......    ),);?>

儲存配置參數的操作

function SaveSetting(){//setting.config.php檔案的路徑,通過settingfile_path來設定;$setfile='./Home'.C('settingfile_path');$a=C('setting'); //將預設配置參數的內容賦值給$a;$b=array(  'tel' => $_POST['tel'],  'web' => $_POST['web'],  ........);//這裡將新的參數值,通過背景表單提交過來;$c=array_merge($a,$b) ;

將數組$a和$b合并;我們知道,array_merge()函數,可以合并兩個數組,並且如果數組元素具有相同的鍵名,後面的值會覆蓋前面的值(數字鍵名除外);

然後,將合并後的數組$c的值進行遍曆後,產生php檔案代碼;

$settingstr="<?php \n return array(\n'Setting' =>array(\n";foreach($c as $key=>$v){  $settingstr.= "\t'".$key."'=>'".$v."',\n";}$settingstr.="),\n);\n?>\n";file_put_contents($setfile,$settingstr); //通過file_put_contents儲存setting.config.php檔案;

到此,setting.config.php檔案的配置參數的值,已經被更新;

寫入檔案是個數組不假,但是可以參考一下var_export函數,沒有必要去迴圈數組了!

$settingstr="<?php \n return array(\n'Setting' =>array(\n"; foreach($c as $key=>$v){  $settingstr.= "\t'".$key."'=>'".$v."',\n"; }$settingstr.="),\n);\n?>\n";file_put_contents($setfile,$settingstr); //通過file_put_contents儲存setting.config.php檔案;

以上代碼可以修改為:

$settingstr = "<?php \n return array(\n'Setting' =>\n".var_export($c,true)." \n ?>";file_put_contents($setfile,$settingstr); //通過file_put_contents儲存

(Thinkphp3.1版本,已經支援C函數儲存設定的參數值,所以,本方法,適合於3.0及以下版本的TP)

另外,我們知道TP在第一次運行時會把項目所有的設定檔,配置參數等,產生一個runtime快取檔案,如果我們更新了congfig 的內容,那麼必須刪除項目中的快取檔案後才會生效。為此,我們讓系統自己來清空緩衝,更新參數。代碼如下:

//RUNTIME_FILE常量是入口檔案中配置的runtimefile的路徑及檔案名稱;if(file_exists(RUNTIME_FILE)){  unlink(RUNTIME_FILE); //刪除RUNTIME_FILE;}

光刪除runtime_file還不夠,要清空一下Cache檔案夾中的檔案;代碼如下:

$cachedir=RUNTIME_PATH."/Cache/";  //Cache檔案的路徑;if ($dh = opendir($cachedir)) {   //開啟Cache檔案夾;  while (($file = readdir($dh)) !== false) {  //遍曆Cache目錄,       unlink($cachedir.$file);        //刪除遍曆到的每一個檔案;  }  closedir($dh);}

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.