用phalcon重写配置参数

时间:2014-01-31 23:43:11

标签: php phalcon

是否可以使用phalcon重写config参数? 我使用ini文件类型。 如果没有 - 请告诉我如何实施。

1 个答案:

答案 0 :(得分:0)

如果你想用php创建ini文件,有可能,甚至没有pha​​lcon。

来自PHP文档评论:

读取文件:$ ini = INI :: read('myfile.ini'); 写文件:INI :: write('myfile.ini',$ ini);

自定义INI类功能:

  • 支持[]数组的语法
  • 支持。在像bar.foo.something = value
  • 这样的键中
  • true和false字符串会自动转换为布尔值
  • 整数字符串自动转换为整数
  • 键在编写时排序
  • 常量被替换,但它们应该写在大括号之间的ini文件中:{MYCONSTANT}

    class INI {
        /**
         *  WRITE
         */
        static function write($filename, $ini) {
            $string = '';
            foreach(array_keys($ini) as $key) {
                $string .= '['.$key."]\n";
                $string .= INI::write_get_string($ini[$key], '')."\n";
            }
            file_put_contents($filename, $string);
        }
        /**
         *  write get string
         */
        static function write_get_string(& $ini, $prefix) {
            $string = '';
            ksort($ini);
            foreach($ini as $key => $val) {
                if (is_array($val)) {
                    $string .= INI::write_get_string($ini[$key], $prefix.$key.'.');
                } else {
                    $string .= $prefix.$key.' = '.str_replace("\n", "\\\n", INI::set_value($val))."\n";
                }
            }
            return $string;
        }
        /**
         *  manage keys
         */
        static function set_value($val) {
            if ($val === true) { return 'true'; }
            else if ($val === false) { return 'false'; }
            return $val;
        }
        /**
         *  READ
         */
        static function read($filename) {
            $ini = array();
            $lines = file($filename);
            $section = 'default';
            $multi = '';
            foreach($lines as $line) {
                if (substr($line, 0, 1) !== ';') {
                    $line = str_replace("\r", "", str_replace("\n", "", $line));
                    if (preg_match('/^\[(.*)\]/', $line, $m)) {
                        $section = $m[1];
                    } else if ($multi === '' && preg_match('/^([a-z0-9_.\[\]-]+)\s*=\s*(.*)$/i', $line, $m)) {
                        $key = $m[1];
                        $val = $m[2];
                        if (substr($val, -1) !== "\\") {
                            $val = trim($val);
                            INI::manage_keys($ini[$section], $key, $val);
                            $multi = '';
                        } else {
                            $multi = substr($val, 0, -1)."\n";
                        }
                    } else if ($multi !== '') {
                        if (substr($line, -1) === "\\") {
                            $multi .= substr($line, 0, -1)."\n";
                        } else {
                            INI::manage_keys($ini[$section], $key, $multi.$line);
                            $multi = '';
                        }
                    }
                }
            }
    
            $buf = get_defined_constants(true);
            $consts = array();
            foreach($buf['user'] as $key => $val) {
                $consts['{'.$key.'}'] = $val;
            }
            array_walk_recursive($ini, array('INI', 'replace_consts'), $consts);
            return $ini;
        }
        /**
         *  manage keys
         */
        static function get_value($val) {
            if (preg_match('/^-?[0-9]$/i', $val)) { return intval($val); } 
            else if (strtolower($val) === 'true') { return true; }
            else if (strtolower($val) === 'false') { return false; }
            else if (preg_match('/^"(.*)"$/i', $val, $m)) { return $m[1]; }
            else if (preg_match('/^\'(.*)\'$/i', $val, $m)) { return $m[1]; }
            return $val;
        }
        /**
         *  manage keys
         */
        static function get_key($val) {
            if (preg_match('/^[0-9]$/i', $val)) { return intval($val); }
            return $val;
        }
        /**
         *  manage keys
         */
        static function manage_keys(& $ini, $key, $val) {
            if (preg_match('/^([a-z0-9_-]+)\.(.*)$/i', $key, $m)) {
                INI::manage_keys($ini[$m[1]], $m[2], $val);
            } else if (preg_match('/^([a-z0-9_-]+)\[(.*)\]$/i', $key, $m)) {
                if ($m[2] !== '') {
                    $ini[$m[1]][INI::get_key($m[2])] = INI::get_value($val);
                } else {
                    $ini[$m[1]][] = INI::get_value($val);
                }
            } else {
                $ini[INI::get_key($key)] = INI::get_value($val);
            }
        }
        /**
         *  replace utility
         */
        static function replace_consts(& $item, $key, $consts) {
            if (is_string($item)) {
                $item = strtr($item, $consts);
            }
        }
    }
    

在此处了解详情:http://lt1.php.net/parse_ini_file