在实际项目中,有的配置为动态变化,然而设计数据库会很麻烦效率又低,所以可以直接在配置文件中做考虑了。
框架: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 //透明度], ];