SConfig::parse PHP Метод

parse() публичный статический Метод

public static parse ( $configFile )
    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;
    }

Usage Example

Пример #1
0
<?php

error_reporting(E_ALL ^ E_NOTICE);
include "../www/global.php";
chdir(dirname(__FILE__));
SLog::$LOGFILE = "log/run.log";
SConfig::$CACHE = false;
$info = array();
for (;;) {
    usleep(1000 * 500);
    $config = SConfig::parse("backend.conf");
    foreach ($config as $conf) {
        if (!empty($conf->app) || !empty($conf->interval)) {
            if (empty($info[$conf->app]['starttime']) || $info[$conf->app]['starttime'] + $conf->interval <= time()) {
                $info[$conf->app]['starttime'] = time();
                $fname = _tmpDir() . "/crontab.pid." . $info[$conf->app]['pid'];
                if (!empty($info[$conf->app]['pid']) && file_exists($fname)) {
                    $fp = fopen($fname, "r");
                    if (flock($fp, LOCK_SH | LOCK_NB) == false) {
                        //上次运行的进程还没有结束
                        fclose($fp);
                        continue;
                    }
                    fclose($fp);
                }
                $ret = pcntl_fork();
                $command = $conf->app;
                if (!empty($conf->params)) {
                    $params = $conf->params;
                } else {
                    $params = new stdclass();