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 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
解析PHP正则提取或替换img标记属性
Jun 26 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 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 金额数字转换成英文
2010/05/06 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python中__call__方法示例分析
2014/10/11 Python
python轻松实现代码编码格式转换
2015/03/26 Python
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python 加密的实例详解
2017/10/09 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
彻底理解Python中的yield关键字
2019/04/01 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python 日志 logging模块详细解析
2020/03/31 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
社区端午节活动方案
2014/01/28 职场文书
西门豹教学反思
2014/02/04 职场文书
绿色环保演讲稿
2014/05/10 职场文书
企业法人代表证明书
2014/09/27 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
社区节水倡议书
2015/04/29 职场文书
爱心捐助活动总结
2015/05/09 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
创业计划书之面包店
2019/09/17 职场文书
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS