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上的memcache和memcached两个pecl库
Mar 29 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
第五章 php数组操作
Dec 30 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
php过滤敏感词的示例
Mar 31 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
laravel手动创建数组分页的实现代码
Jun 07 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设计模式 Bridge (桥接模式)
2011/06/26 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
php图片裁剪函数
2018/10/31 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
python中self原理实例分析
2015/04/30 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
python matplotlib画图实例代码分享
2017/12/27 Python
Python assert关键字原理及实例解析
2019/12/13 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
Java程序员综合测试题
2014/04/25 面试题
元旦联欢会主持词
2014/03/26 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
质检员岗位职责范本
2015/04/07 职场文书
个人欠条范本
2015/07/03 职场文书
校运会广播稿
2015/08/19 职场文书
超市主管竞聘书
2015/09/15 职场文书
商业计划书格式、范文
2019/03/21 职场文书
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL