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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP函数超时处理方法
Feb 14 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 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中二维数组排序问题方法详解
2015/08/28 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
Javascript !!的作用
2008/12/04 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
法学毕业生自荐信
2013/11/13 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
党员检讨书
2014/10/13 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
ES6 解构赋值的原理及运用
2021/05/25 Javascript
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript