在实际项目中,有的配置为动态变化,然而设计数据库会很麻烦效率又低,所以可以直接在配置文件中做考虑了。
框架:ThinkPHP5.0
框架默认配置文件目录为applocation/extra,在这里可以自定义配置文件。
/**
* 修改扩展配置文件
* @param array $arr 需要更新或添加的配置
* @param string $file 配置文件名(不需要后辍)
* @param string $user 修改人
* @return bool
*/
function extraconfig($arr = [], $file ,$user='admin')
{
if (is_array($arr)) {
$filename = $file . EXT;
$filepath = APP_PATH . 'extra/' . $filename;
if (!file_exists($filepath) ) {
if(!fopen($filepath, "w")){
return 'PermissionError1';
}
}
if (!is_writable($filepath)) {
return 'PermissionError2';
}
$conf = include $filepath;
foreach ($arr as $key => $value) {
$conf[$key] = $value;
}
$time = date('Y/m/d H:i:s');
$str = "<?php\r\n/**\r\n * 由".$user."建立.\r\n * $time\r\n */\r\nreturn [\r\n";
foreach ($conf as $key => $value) {
if(is_array($value)){
$str.="\t'$key'=>[";
foreach ($value as $r) {
$str .= "'$r',";
}
$str = rtrim($str,',');
$str .= ']'."\r\n";
} else{
$str .= "\t'$key' => '$value',";
$str .= "\r\n";
}
}
$str .= '];';
$result = file_put_contents($filepath, $str);
if($result){
return 'success';
} else {
return $result;
}
} else {
return 'error';
}
}
//调用方法
public function setSeo(){
$arr = array(
'title' => input('title'),
'keywords' => input('keywords'),
'description' => input('description'),
);
$user='marhal';
$result=extraconfig($arr,'seo',$user);
if($result=='success'){
$this->success('修改成功',url('seo/index'));
}elseif($result=='error'){
$this->error('修改失败,请重试');
}
elseif($result=='PermissionError'){
$this->error('文件无权限,请联系管理员');
}
}
效果
<?php /** * 由marhal建立. * 2019/03/04 14:28:55 */ return [ 'title' => '我的网站', 'keywords' => '我的网站怎么样', 'description' => '嗯,还好', ];
以上为简单的一位数组,二维数组的话可在原方法基础上进行修改拼接即可,示例:
$file='poster';
$user='marhal';
//这里的$data是一个二维数组,看着下面的最终效果自行思考是怎样的格式
if (is_array($data)) {
$filename = $file . EXT;
$filepath = APP_PATH . 'extra/' . $filename;
if (!file_exists($filepath) ) {
fopen($filepath, "w") or die($this->error('文件没有权限,请联系管理员'));
}
if (!is_writable($filepath)) {
$this->error('文件没有权限,请联系管理员');
}
$time = date('Y/m/d H:i:s');
$str = "<?php\r\n/**\r\n * 由".$user."建立.\r\n * $time\r\n */\r\nreturn [\r\n";
$str.="//文字设置\r\n";
$str.="'title'=>[\r\n";
foreach ($data['title'] as $key => $value) {
$str .= "\t'$key' => '$value',";
$str .= "\r\n";
}
$str .= '],'."\r\n";
$str.="//二维码设置\r\n";
$str.="'qrcode'=>[\r\n";
foreach ($data['qrcode'] as $key => $value) {
$str .= "\t'$key' => '$value',";
$str .= "\r\n";
}
$str .= '],'."\r\n"."];";
file_put_contents($filepath, $str);
} else {
$this->error('非法数据');
}
x效果如下
<?php /** * 由marhal建立. * 2019/03/04 14:28:55 */ return [ //文字设置 'title'=>[ 'text'=>'以心逐物', 'color'=>'#000000', 'size'=>'48', 'locate'=>5 ], //二维码图片的位置 'qrcode' => [ 'left' => 300, 'top' => 1100, 'stream' => 0, //图片资源是否是字符串图像流 'right' => 0, 'bottom' => 0, 'width' => 500, 'height' => 500, 'opacity' => 100 //透明度 ], ];