public static function parse($configFile)
{
self::$_tmpPrefix = 0;
self::$_tmpData = array();
$cacheKey = "SConfig_Cache_" . md5(realpath($configFile));
if (self::$CACHE) {
if (isset(self::$_result[$cacheKey])) {
return self::$_result[$cacheKey];
}
$tmp_file = self::_tmpDir() . "/" . self::$_tmpPrefix . $cacheKey;
if (is_file($tmp_file) && filemtime($tmp_file) >= filemtime($configFile)) {
$result = unserialize(file_get_contents($tmp_file, false));
self::$_result[$cacheKey] = $result;
return $result;
}
}
$content = file_get_contents($configFile, false);
//去掉注释,#号表示注释
$content = preg_replace("/^(\\s*)#(.*)/m", "", $content);
//保存临时变量,单引号,双引号里特殊字符
$content = preg_replace_callback("/(\\S+?)[\\s:]+([\\'\"])(.*?)\\2;/m", array("SConfig", "_tmpData"), $content);
//获取最直接的k,v值
$result = self::_getKV($content);
self::_split($content, $result);
if (self::$CACHE) {
file_put_contents($tmp_file, serialize($result), LOCK_EX);
self::$_result[$cacheKey] = $result;
}
return $result;
}