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 Squid中可缓存的动态网页设计
Sep 17 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
php对数组排序的简单实例
Dec 25 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
PHP查询分页的实现代码
Jun 09 PHP
PDO::exec讲解
Jan 28 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 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
基于MySQL分区性能的详细介绍
2013/05/02 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
php文件包含的几种方式总结
2019/09/19 PHP
js验证表单大全
2006/11/25 Javascript
ext form 表单提交数据的方法小结
2008/08/08 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
简单的js表格操作
2016/09/24 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python getopt详解及简单实例
2016/12/30 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
python去除扩展名的实例讲解
2018/04/23 Python
python检索特定内容的文本文件实例
2018/06/05 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
django orm模块中的 is_delete用法
2020/05/20 Python
酒店执行总经理岗位职责
2013/12/15 职场文书
设计顾问服务计划书
2014/05/04 职场文书
小学语文业务学习材料
2014/06/02 职场文书
西安大雁塔导游词
2015/02/10 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
配置nginx 重定向到系统维护页面
2021/06/08 Servers
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技