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配置参数总结
Jun 14 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
PHP中的流(streams)浅析
Jul 02 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
php并发加锁示例
Oct 17 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
简单实现PHP留言板功能
Dec 21 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 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 批量生成html,txt文件的实现代码
2013/06/26 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
继续学习javascript闭包
2015/12/03 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python实现新浪博客备份的方法
2016/04/27 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python3 max()函数基础用法
2019/02/19 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python中的Cookie模块如何使用
2020/06/04 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
2014年小学数学工作总结
2014/12/12 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
简历自我评价范文
2019/04/24 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
Python Pandas 删除列操作
2022/03/16 Python