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面向对象的方法重载两种版本比较
Sep 08 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
2014过年倒计时示例
Jan 31 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
php数组分页实现方法
Apr 30 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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
linux中cd命令使用详解
2015/01/08 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
python tkinter窗口最大化的实现
2019/07/15 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
应届生程序员求职信
2013/11/05 职场文书
大学生村官工作感言
2014/01/10 职场文书
中华魂演讲稿
2014/05/13 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS