MENU

ThinkPHP 修改extra配置文件函数

May 1, 2019 • Read: 153 • PHP阅读设置

最近撸了一个小查询工具,修改的一些参数很简单,就懒得上数据库了,上代码

函数

/**
 * 修改扩展配置文件
 * @param array  $arr  需要更新或添加的配置
 * @param string $file 配置文件名(不需要后辍)
 * @return bool
 */
function extra($arr = [], $file)
{
    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 * 最后修改时间:\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';
    }
}

原作者有一个“修改人”的参数,我给删了,我用不着!

以上原文地址:https://msd.misuland.com/pd/2884250137616453822

调用方法

public function index(){
    $data = [
        'name' => '用户名',
        'password' => '密码'
    ];
    $adminres = extra($data,'admin');
    if($adminres == 'success'){
        return json(['code'=>1,'msg'=>'修改成功!']);
    }elseif($adminres == 'PermissionError'){
        return json(['code'=>0,'msg'=>'文件无权限!']);
    }else{
       return json(['code'=>0,'msg'=>'修改失败!']); 
    }
}

后面采用var_export函数,发现可以更简单!

精简版函数

/**
 * 修改扩展配置文件
 * @param array  $data  需要更新或添加的配置
 * @param string $file 配置文件名(不需要后辍)
 * @return int
 */
function extra($data = [], $file){
    //将文件内的数组和提交过来的数组进行合并
    $dataMerge = array_merge(config('config'),$data);
    $time = date('Y/m/d H:i:s');
    //执行修改
    $dataRes = @file_put_contents(APP_PATH . 'extra' . DS . $file . EXT, '<?php' . PHP_EOL . '/**' . PHP_EOL . ' * 最后修改时间:' . PHP_EOL . ' * ' . $time . PHP_EOL . ' */' . PHP_EOL . 'return ' . var_export($dataMerge, true) . ';');
    if($dataRes !== false){
        return true;
    }else{
        return false;
    }
}

该函数返回结果为int提交字符的数量!调用方法同上调用方法!

Leave a Comment

已有 3 条评论
  1. 码砖不易,感谢分享。。

  2. 谢谢分享,创作不易

  3. 不错,支持下。