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之第六天
Oct 09 PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php发送邮件的问题详解
Jun 22 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
python循环监控远程端口的方法
2015/03/14 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python根据多个文件名批量查找文件
2019/08/13 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
python/golang 删除链表中的元素
2020/09/14 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
个人主要事迹材料
2014/08/26 职场文书
公司委托书格式范文
2014/10/09 职场文书
西岭雪山导游词
2015/02/06 职场文书
单身证明范本
2015/06/15 职场文书