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 09 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
php实现转换ubb代码的方法
Jun 18 PHP
Java中final关键字详解
Aug 10 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
PHP面向对象程序设计实例分析
Jan 26 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
破解Session cookie的方法
2006/07/28 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python 私有函数的实例详解
2017/09/11 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python实现定时发送qq消息
2019/01/18 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
Python基础知识点 初识Python.md
2019/05/14 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
澳大利亚相机之家:Camera House
2017/11/30 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
一分钟演讲稿
2014/04/30 职场文书
无房证明范本
2014/09/17 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
党员批评与自我批评
2014/10/15 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs