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 相关文章推荐
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
PHP的可变变量名的使用方法分享
Feb 05 PHP
深入解析php之sphinx
May 15 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
PHP中类的继承和用法实例分析
May 24 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
PHP中isset、empty的用法与区别示例详解
Nov 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
php5 图片验证码实现代码
2009/12/11 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
JS自调用匿名函数具体实现
2014/02/11 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
Javascript实现字数统计
2015/07/03 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
周年庆典邀请函范文
2014/01/24 职场文书
区三好学生主要事迹
2014/01/30 职场文书
银行服务感言
2014/03/01 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript