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
投票管理程序
Oct 09 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
简单的php 验证图片生成函数
May 21 PHP
php分页代码学习示例分享
Feb 20 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
用PHP生成html分页列表的代码
2007/03/18 PHP
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
php数据库抽象层 PDO
2011/05/07 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
浅析Python中return和finally共同挖的坑
2017/08/18 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
2014年社区庆元旦活动方案
2014/03/08 职场文书
教学质量评估实施方案
2014/03/17 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
2014年售票员工作总结
2014/11/19 职场文书
求职简历自我评价2015
2015/03/10 职场文书
2015年妇女工作总结
2015/05/14 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL