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 相关文章推荐
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
php 随机生成10位字符代码
Mar 26 PHP
PHP重定向的3种方式
Mar 07 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
php获得用户ip地址的比较不错的方法
Feb 08 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
QQ登录简单实现代码
2021/03/09 Javascript
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
python实现从字典中删除元素的方法
2015/05/04 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python线程池threadpool实现篇
2018/04/27 Python
Django rest framework实现分页的示例
2018/05/24 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
《蚕姑娘》教学反思
2014/04/15 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
考试后的感想
2015/08/07 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Mysql数据库命令大全
2021/05/26 MySQL