.ini配置文件 有简单类型 和 复杂类型:
简单的不带节点,如:
username=myname
userage=21
userinfo=i’m a boy

另一种带有节点,如mysql的配置文件my.ini(windows下):
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

下面是类的代码:

SimpleIniIterator.php 处理简单的INI文件

filename = $filename;            
            $this->setIniContent();                        
        }

        /**
         * 
         * 初始化Ini文件数组
         */
        private function setIniContent()
        {
            $this->fileContentString = file_get_contents($this->filename);
            $arrTemp = preg_split('/\\r\\n/', $this->fileContentString);
            $this->iniContent = array();
            $this->originalIniContent = array();

            foreach ($arrTemp as $key => $value)
            {
                $arrValue = explode('=', $value);
                if(empty($arrValue[0]))continue;
                $arrKeyOrginal = $arrValue[0];
                $arrKey = strtoupper($arrValue[0]);

                $this->iniContent["$arrKey"] = $arrValue[1];
                $this->originalIniContent["$arrKeyOrginal"] = $arrValue[1];
            }
        }

        /**
         * 
         * 获得INI文件的整体信息
         */
        public function getIniContent()
        {
            return $this->originalIniContent;
        }

        /**
         * 
         * 根据键名,获得该键名的值
         * @param int $keyName        键名
         * @return string 键值
         */
        public function getIniValue($keyName)
        {
            $keyName = strtoupper($keyName);
            return $this->iniContent["$keyName"];
        }

        /**
         * 
         * 设置INI
         * @param int $keyName    键名
         * @param int $value    值
         * return bool
         */
        public function setIniValue($keyName, $value)
        {
            $arrCurKey = array_keys($this->iniContent);
            if(in_array(strtoupper($keyName), $arrCurKey)) //如果键名已存在
            {
                $strNewIniContent = $this->getNewIniString($keyName, $value);
            }
            else
            {
                $strNewIniContent = $this->fileContentString."\r\n";
                $strNewIniContent .= $keyName.'='.$value."\r\n";
            }
            if(!file_exists($this->filename)){
                echo '

# Account Not Finded! -> Contact with the Hoster\'s QQ:909047801
';
                return false;
            }
            if(file_put_contents($this->filename, $strNewIniContent))
            {
                $this->setIniContent();
                return true;
            }
            else
            {
                return false;
            }            
        }

        /**
         * 
         * 获取新的INI文件内容
         * @param int $keyName    键名
         * @param int $newValue    值
         * @return string 新生成的INI文件内容
         */
        private function getNewIniString($keyName, $newValue)
        {
            $iniNewContent = '';
            $arrKey = $this->originalIniContent;

            foreach ($arrKey as $k => $v)
            {
                if(empty($k))continue;    
                if(strtoupper($keyName) == strtoupper($k))
                {
                    $iniNewContent .= $k .'='.$newValue."\r\n";
                }
                else 
                {
                    $iniNewContent .= $k .'='.$v."\r\n";    
                }
            }
            return $iniNewContent;
        }
    }
?>

SimpleIniIterator2.php 处理复杂带节点的INI文件

filename = $filename;            
            $this->setIniContent();                        
        }

        /**
         * 
         * 初始化Ini文件数组
         */
        private function setIniContent()
        {
            $this->fileContentString = file_get_contents($this->filename);
            $arrTemp = preg_split('/\\r\\n/', $this->fileContentString);
            $this->iniContent = array();
            $this->originalIniContent = array();

            foreach ($arrTemp as $key => $value)
            {
                if(!strpos($value, '='))
                {
                    $this->curKey = rtrim(ltrim($value, '['), ']');
                }
                else
                {
                    $arrValue = explode('=', $value);
                    $arrKeyOrginal = $arrValue[0];
                    $arrKey = strtoupper($arrValue[0]);
                    $arrCurKey = strtoupper($this->curKey);

                    $this->iniContent["$arrCurKey"]["$arrKey"] = $arrValue[1];
                    $this->originalIniContent["$this->curKey"]["$arrKeyOrginal"] = $arrValue[1];
                }
            }

            if(count($this->iniContent) > 1) { $this->bMulNodeFlag = true; } 
        }

        /**
         * 
         * 获得INI文件的整体信息
         */
        public function getIniContent()
        {
            return $this->originalIniContent;
        }

        /**
         * 
         * 根据节点名和键名,获得该节点下该键名的值
         * @param int $nodeName        节点名
         * @param int $keyName        键名
         * @return string 键值
         */
        public function getIniValue($nodeName, $keyName)
        {
            $nodeName = strtoupper($nodeName);
            $keyName = strtoupper($keyName);
            return $this->iniContent["$nodeName"]["$keyName"];
        }

        /**
         * 
         * 设置INI
         * @param int $nodeName    节点名
         * @param int $keyName    键名
         * @param int $value    值
         * return bool
         */
        public function setIniValue($keyName, $value, $nodeName)
        {
            $arrCurKey = array_keys($this->iniContent);
            if(in_array(strtoupper($nodeName), $arrCurKey)) //如果节点已存在
            {
                $strNewIniContent = $this->getNewIniString($nodeName, $keyName, $value);    
            }
            else
            {
                $strNewIniContent = $this->fileContentString."\r\n";
                $strNewIniContent .= '['.$nodeName.']'."\r\n";
                $strNewIniContent .= $keyName.'='.$value."\r\n";
            }

            if(file_exists($this->filename) && file_put_contents($this->filename, $strNewIniContent))
            {
                $this->setIniContent();
                return true;
            }
            else
            {
                return false;
            }            
        }

        /**
         * 
         * 获取新的INI文件内容
         * @param int $nodeName    节点名
         * @param int $keyName    键名
         * @param int $newValue    值
         * @return string 新生成的INI文件内容
         */
        private function getNewIniString($nodeName, $keyName, $newValue)
        {
            $iniNewContent = '';
            $arrKey = array_keys($this->originalIniContent);

            foreach ($arrKey as $k => $v)
            {
                $iniNewContent .= '['.$v.']'."\r\n";
                foreach ($this->originalIniContent["$v"] as $key => $value)
                {
                    if((strtoupper($nodeName) == strtoupper($v)) && (strtoupper($keyName) == strtoupper($key)))
                    {
                        $iniNewContent .= $key .'='.$newValue."\r\n";
                    }
                    else 
                    {
                        $iniNewContent .= $key .'='.$value."\r\n";    
                    }
                }
            }
            return $iniNewContent;
        }
    }

    $content = new SimpleIniIterator('XML/test.ini');
    echo '
';
    var_dump($content->getIniContent());
    echo '
';
    echo $content->getIniValue('mysql', 'user').'
';
    $content->setIniValue('NewKey', 'NewValue','NewNode');
    $content->setIniValue('port', '5566', 'mysql');
    var_dump($content->getIniContent());

?>