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 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
php网站地图生成类示例
Jan 13 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 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
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
python简单实现计算过期时间的方法
2015/06/09 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
关于逃课的检讨书
2014/01/23 职场文书
物流管理毕业生自荐信范文
2014/03/15 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
万里长城导游词
2015/01/30 职场文书
大学生学期个人总结
2015/02/12 职场文书
综合素质评价自我评价
2015/03/06 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
Java版 简易五子棋小游戏
2022/05/04 Java/Android