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 相关文章推荐
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
php HTML无刷新提交表单
Apr 05 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
MySQL修改密码方法总结
2008/03/25 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
修改发贴的编辑功能
2007/03/07 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Python作用域与名字空间原理详解
2020/03/21 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
舞蹈比赛获奖感言
2014/02/04 职场文书
总经理检讨书
2014/09/15 职场文书
万能检讨书2000字
2014/10/17 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
小学校园广播稿
2015/08/18 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL