本质:修改配置文件信息然后读取的过程。
基本思路、以及实现流程:
1、添加系统配置信息;
2、获取系统配置数据;
3、把添加的系统配置信息写入系统配置文件(./Application/Common/Conf/config.php);
4、读取(展示)系统配置文件信息。
View层代码(部分)
<tr>
<th width="15%"><i class="require-red">*</i>域名:</th>
<td><input type="text" value="{$Think.config.DOMAIN}" name="domain"></td>
</tr>
控制器代码
<?php
namespace Admin\Controller;
use Think\Controller;
class SystemController extends CommonController
{
public function lst(){
if(IS_POST){
$file='./Application/Common/Conf/config.php';
$config=array_merge(include $file,array_change_key_case($_POST,CASE_UPPER));
$str="<?php\r\nreturn ".var_export($config,true)."; ?>";
if(file_put_contents($file, $str)){
$this->success('修改配置项成功!',U('lst'));
}else{
$this->error('修改配置项失败!');
}
return;
}
$this->display();
}
./Application/Common/Conf/config.php配置文件内容
<?php
return array (
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'ssssp',
'DB_USER' => 'root',
'DB_PWD' => 'root',
'DB_PORT' => 3306,
'DB_PREFIX' => 'cs_',
'DB_CHARSET' => 'utf8',
'DOMAIN' => 'htpp://127.0.0.1/ca',
'TITLE' => '郭庆的NBA官网',
'KEYWORDS' => '郭庆,NBA,IVERSON',
'DESCRIPTION' => '我是世界上跑得最快的郭庆',
'EMAIL' => '173729225@qq.com'
); ?>
一、添加系统配置信息:界面和普通的友链修改等界面无异,增加网站title、keywords……等配置信息。
二、获取系统配置数据:include ./Application/Common/Conf/config.php 为数组形式,dump结果:
array(9) {
["DB_TYPE"]=>;
string(5) "mysql"
["DB_HOST"]=>;
string(9) "localhost"
["DB_NAME"]=>;
string(3) "nba"
["DB_USER"]=>;
string(4) "root"
["DB_PWD"]=>;
string(7) "guoqing"
["DB_PORT"]=>;
string(4) "3306"
["DB_PREFIX"]=>;
string(4) "nba_"
["URL"]=>;
string(14) "11111111111111"
["TITLE"]=>;
string(6) "111111"
}
$_POST的结果为添加的配置信息:
array(2) {
["url"]=>;
string(14) "11111111111111"
["title"]=>;
string(6) "111111"
}
将配置文件原有的数据更新为新的配置数据:
1、将原有文件数据(数组形式)和添加的配置信息(数组形式)合并为一个数组。
使用函数:array_merge();
($_POST传过来的数组key为小写,需把key改为大写,使用函数;array_change_key_case());
2、将新旧合并后的配置信息按照原来配置文件的形式,转化为字符串,使用函数:var_export()
3、将字符串形式的配置数据写入配置文件,使用函数file_put_contents().
4、视图层读取配置信息:{$Think.config.TITLE}或者{:C(‘TITEL’)},都可以。
结束
使用到的函数:
array_merge();
array_merge(array1,array2,array3...) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
array_change_key_case()
array_change_key_case(array,case) -- 返回字符串键名全为小写或大写的数组
第一个参数 array,必需。规定要使用的数组。
第二个参数 case,可选。
CASE_LOWER - 默认值。以小写字母返回数组的键。
CASE_UPPER - 以大写字母返回数组的键。
var_export()
var_export() 函数返回关于传递给该[函数]的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。var_export必须返回合法的php代码, 也就是说,var_export返回的代码,可以直接当作php代码赋值个一个变量。
file_put_contents().
file_put_contents() 函数把一个字符串写入文件中。
该函数访问文件时,遵循以下规则:
如果设置了 FILE_USE_INCLUDE_PATH,那么将检查 filename 副本的内置路径
如果文件不存在,将创建一个文件
打开文件
如果设置了 LOCK_EX,那么将锁定文件
如果设置了 FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容
向文件中写入数据
关闭文件并对所有文件解锁
如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。
网友评论