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+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
php实现水仙花数示例分享
Apr 03 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
php获取今日开始时间和结束时间的方法
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
PHP中SESSION的注销与清除
2015/04/16 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
iView框架问题整理小结
2018/10/16 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
python 制作本地应用搜索工具
2021/02/27 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
公务员总结性个人自我评价
2013/12/05 职场文书
公司道歉信范文
2014/01/09 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
送给客户微信问候语!
2019/07/04 职场文书