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自动跳转中英文页面
Jul 29 PHP
《PHP编程最快明白》第三讲:php数组
Nov 01 PHP
php json_encode奇怪问题说明
Sep 27 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
php与flash as3 socket通信传送文件实现代码
Aug 16 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 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中简单的对称加密算法实现
2017/01/05 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
php post换行的方法
2020/02/03 PHP
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
python实现批量改文件名称的方法
2015/05/25 Python
Python线程之定位与销毁的实现
2019/02/17 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
护士实习自我鉴定
2013/10/22 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
主题婚礼策划方案
2014/02/10 职场文书
材料员岗位职责
2014/03/13 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
详解TypeScript的基础类型
2022/02/18 Javascript