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缓存技术介绍
Nov 25 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
PHP概率计算函数汇总
Sep 13 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
laravel框架如何设置公共头和公共尾
Oct 22 PHP
php引用传递
Apr 01 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
关于PHP语言构造器介绍
2013/07/08 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
简单的自定义php模板引擎
2016/08/26 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
iview实现图片上传功能
2020/06/29 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
numpy.random模块用法总结
2019/05/27 Python
python 实现汉诺塔游戏
2020/11/28 Python
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
建筑项目策划书
2014/01/13 职场文书
先进个人获奖感言
2014/01/24 职场文书
设计师求职信模板
2014/05/06 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
师范生见习报告
2014/10/31 职场文书
高中班主任评语
2014/12/30 职场文书
python文件目录操作之os模块
2021/05/08 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技