thinkphp 動態配置

來源:互聯網
上載者:User

標籤:合并   close   efi   命名   常量   刪除   read   複製   代碼   

最近在用@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檔案的結構

  1. <?php
  2. return array(
  3.     ‘setting‘=>array(
  4.         ‘tel‘  => ‘400-088-7380‘,
  5.                 ‘qq‘   => ‘88888888‘,
  6.                 ......
  7.         ),
  8. );
  9. ?>
複製代碼 

儲存配置參數的操作

  1. function SaveSetting(){
  2. //setting.config.php檔案的路徑,通過settingfile_path來設定;
  3. $setfile=‘./Home‘.C(‘settingfile_path‘); 
  4. $a=C(‘setting‘);  //將預設配置參數的內容賦值給$a;
  5. $b=array(
  6.    ‘tel‘ => $_POST[‘tel‘],
  7.    ‘web‘ => $_POST[‘web‘],
  8.    ........
  9. );
  10. //這裡將新的參數值,通過背景表單提交過來;
  11.         
  12. $c=array_merge($a,$b) ;
複製代碼 

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

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

  1. $settingstr="<?php \n return array(\n‘Setting‘ =>array(\n";
  2. foreach($c as $key=>$v){
  3.     $settingstr.= "\t‘".$key."‘=>‘".$v."‘,\n";
  4. }
  5. $settingstr.="),\n);\n?>\n";
  6. file_put_contents($setfile,$settingstr); //通過file_put_contents儲存setting.config.php檔案;
複製代碼 

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

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

  1. $settingstr="<?php \n return array(\n‘Setting‘ =>array(\n";
  2.  foreach($c as $key=>$v){
  3.     $settingstr.= "\t‘".$key."‘=>‘".$v."‘,\n";
  4.  }
  5. $settingstr.="),\n);\n?>\n";
  6. file_put_contents($setfile,$settingstr); //通過file_put_contents儲存setting.config.php檔案;
複製代碼複製代碼

以上代碼可以修改為:

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



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

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

  1. //RUNTIME_FILE常量是入口檔案中配置的runtimefile的路徑及檔案名稱;
  2. if(file_exists(RUNTIME_FILE)){
  3.     unlink(RUNTIME_FILE); //刪除RUNTIME_FILE;
  4. }
  5. 光刪除runtime_file還不夠,要清空一下Cache檔案夾中的檔案;代碼如下:
  6. $cachedir=RUNTIME_PATH."/Cache/";   //Cache檔案的路徑;
  7. if ($dh = opendir($cachedir)) {     //開啟Cache檔案夾;
  8.     while (($file = readdir($dh)) !== false) {    //遍曆Cache目錄,
  9.               unlink($cachedir.$file);                //刪除遍曆到的每一個檔案;
  10.     }
  11.     closedir($dh);
  12. }    
複製代碼 

到此,整個動態配置參數檔案,並清空緩衝的功能全部實現。

thinkphp 動態配置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.