ini文件编辑

<?php



define('CONFIG_PARSER_LF', "\n"); //如果为windows,请设置为\r\n



class ConfigParser

{

    private static $_instance = null;

    private $_config;

    private $_filePath;



    final private function __construct() {}



    final private function __clone() {}



    public static function instance($filePath)

    {

        if (empty(self::$_instance)) {

            self::$_instance = new ConfigParser();

        }



        self::$_instance->_filePath = $filePath;

        self::$_instance->_config = @parse_ini_file($filePath, true);

        if (empty(self::$_instance->_config)) {

            self::$_instance->_config = array();

        }



        return self::$_instance;

    }



    public function get()

    {

        //获取所有

        if (func_num_args() == 0) {

            return $this->_config;

        }



        //获取section

        if (func_num_args() == 1) {

            if (!isset($this->_config[func_get_arg(0)])) {

                return null;

            }

            return $this->_config[func_get_arg(0)];

        }



        //获取option

        if (func_num_args() == 2) {

            if (!isset($this->_config[func_get_arg(0)])) {

                return null;

            }



            $selection = $this->_config[func_get_arg(0)];

            if (!is_array($selection) || !isset($selection[func_get_arg(1)])) {

                return null;

            }



            return $selection[func_get_arg(1)];

        }

    }



    public function addSection($section)

    {

        if (isset($this->_config[$section])) {

            return false;

        }



        $this->_config[$section] = array();

        return true;

    }



    public function set()

    {

        if (in_array(func_num_args(), array(2, 3))) {

            return false;

        }



        //设置section

        if (func_num_args() == 2) {

            $this->_config[func_get_arg(0)] = func_get_arg(1);

            return true;

        }



        //设置option

        if (func_num_args() == 3) {

            if (!isset($this->_config[func_get_arg(0)])) {

                $this->_config[func_get_arg(0)] = array();

            }



            if (!is_array($this->_config[func_get_arg(0)])) {

                return false;

            }



            $this->_config[func_get_arg(0)][func_get_arg(1)] = func_get_arg(2);

            return true;

        }

    }



    public function del()

    {

        //删除所有

        if (func_num_args() == 0) {

            $this->_config = array();

            return true;

        }



        //删除section

        if (func_num_args() == 1) {

            if (isset($this->_config[func_get_arg(0)])) {

                unset($this->_config[func_get_arg(0)]);

                return true;

            }

        }



        //删除option

        if (func_num_args() == 2) {

            if (!isset($this->_config[func_get_arg(0)])

                || !is_array($this->_config[func_get_arg(0)])

            ) {

                return false;

            }



            if (!isset($this->_config[func_get_arg(0)][func_get_arg(1)])) {

                return false;

            }



            unset($this->_config[func_get_arg(0)][func_get_arg(1)]);

            return true;

        }



        return false;

    }



    public function write()

    {

        if (empty($this->_fileName)) {

            $this->_config = array();

            return false;

        }



        $contents = array();

        $contentsNotInSection = array();

        if (!empty($this->_config)) {

            foreach ($this->_config as $section => $sectionItem) {

                 if (is_array($sectionItem)) {

                     array_push($contents, "[{$section}]");

                     if (!empty($sectionItem)) {

                         foreach ($sectionItem as $key => $value) {

                             array_push($contents, "{$key} = {$value}");

                         }

                     }

                     continue;

                 }

                 array_push(

                    $contentsNotInSection, "{$section} = {$sectionItem}"

                 );

            }

            $contents = array_unique($contents);

            $contentsNotInSection = array_unique($contentsNotInSection);

            $contents = array_merge($contentsNotInSection, $contents);

        }



        return file_put_contents(

            $this->_filePath, implode(CONFIG_PARSER_LF, $contents)

        );

    }

}





//使用说明

//config.ini

//gmail = [email protected]

//[section]

//name = value



$config = ConfigParser::instance('config.ini');

//读取

$config->get();

$config->get('gmail');

$config->get('section', 'name');



//添加section

$config->addSection('test');



//设置

$config->set('gmail', '[email protected]');

$config->set('section', array('name' => 'value'));

$config->set('section', 'name', 'value');



//删除

$config->del();

$config->del('gmail');

$config->del('section');

$config->del('section', 'name');



//将修改后的值保存到文件中

$config->write();

你可能感兴趣的:(ini)