這篇文章主要介紹了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!