thinkPHP框架动态配置用法实例分析


Posted in PHP onJune 14, 2018

本文实例讲述了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文件的结构

<?php
return 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);
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
PHP文件读取功能的应用实例
May 08 PHP
8个PHP数组面试题
Jun 23 PHP
详解WordPress开发中wp_title()函数的用法
Jan 07 PHP
PHP自定义函数实现数组比较功能示例
Oct 19 PHP
PHP基于面向对象封装的分页类示例
Mar 15 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
php微信开发之谷歌测距
Jun 14 #PHP
php微信开发之图片回复功能
Jun 14 #PHP
php微信开发之音乐回复功能
Jun 14 #PHP
php微信开发之关键词回复功能
Jun 13 #PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 #PHP
微信公众号开发之获取位置信息php代码
Jun 13 #PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 #PHP
You might like
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
实用函数9
2007/11/08 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
浅谈js闭包理解
2019/03/28 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
python仿抖音表白神器
2019/04/08 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
《绿色蝈蝈》教学反思
2014/03/02 职场文书
团代会宣传工作方案
2014/05/08 职场文书
社区春季防火方案
2014/06/02 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
作风建设年度心得体会
2014/10/29 职场文书
党纪处分决定书
2015/06/24 职场文书