⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 .nfs0e5f801900000006

📁 基础原形来自 Ourplus,修补跨站脚本攻击漏洞 采用PHP+Mysql+Xml开发的网站流量统计分析系统 ,不影响页面下载速度。 本流量统计系统采用了高效的程序算法和精心优化的数据库结构
💻 NFS0E5F801900000006
📖 第 1 页 / 共 5 页
字号:
                case 'ge':                case 'gte':                    $token = '>=';                    break;                case 'and':                    $token = '&&';                    break;                case 'or':                    $token = '||';                    break;                case 'not':                    $token = '!';                    break;                case 'mod':                    $token = '%';                    break;                case '(':                    array_push($is_arg_stack, $i);                    break;                case 'is':                    /* If last token was a ')', we operate on the parenthesized                       expression. The start of the expression is on the stack.                       Otherwise, we operate on the last encountered token. */                    if ($tokens[$i-1] == ')')                        $is_arg_start = array_pop($is_arg_stack);                    else                        $is_arg_start = $i-1;                    /* Construct the argument for 'is' expression, so it knows                       what to operate on. */                    $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start));                    /* Pass all tokens from next one until the end to the                       'is' expression parsing function. The function will                       return modified tokens, where the first one is the result                       of the 'is' expression and the rest are the tokens it                       didn't touch. */                    $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1));                    /* Replace the old tokens with the new ones. */                    array_splice($tokens, $is_arg_start, count($tokens), $new_tokens);                    /* Adjust argument start so that it won't change from the                       current position for the next iteration. */                    $i = $is_arg_start;                    break;                default:                    if(preg_match('~^' . $this->_func_regexp . '$~', $token) ) {                            // function call                            if($this->security &&                               !in_array($token, $this->security_settings['IF_FUNCS'])) {                                $this->_syntax_error("(secure mode) '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__);                            }                    } elseif(preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$~', $token)) {                        // object or variable                        $token = $this->_parse_var_props($token);                    } elseif(is_numeric($token)) {                        // number, skip it                    } else {                        $this->_syntax_error("unidentified token '$token'", E_USER_ERROR, __FILE__, __LINE__);                    }                    break;            }        }        if ($elseif)            return '<?php elseif ('.implode(' ', $tokens).'): ?>';        else            return '<?php if ('.implode(' ', $tokens).'): ?>';    }    function _compile_arg_list($type, $name, $attrs, &$cache_code) {        $arg_list = array();        if (isset($type) && isset($name)            && isset($this->_plugins[$type])            && isset($this->_plugins[$type][$name])            && empty($this->_plugins[$type][$name][4])            && is_array($this->_plugins[$type][$name][5])            ) {            /* we have a list of parameters that should be cached */            $_cache_attrs = $this->_plugins[$type][$name][5];            $_count = $this->_cache_attrs_count++;            $cache_code = "\$_cache_attrs =& \$this->_smarty_cache_attrs('$this->_cache_serial','$_count');";        } else {            /* no parameters are cached */            $_cache_attrs = null;        }        foreach ($attrs as $arg_name => $arg_value) {            if (is_bool($arg_value))                $arg_value = $arg_value ? 'true' : 'false';            if (is_null($arg_value))                $arg_value = 'null';            if ($_cache_attrs && in_array($arg_name, $_cache_attrs)) {                $arg_list[] = "'$arg_name' => (\$this->_cache_including) ? \$_cache_attrs['$arg_name'] : (\$_cache_attrs['$arg_name']=$arg_value)";            } else {                $arg_list[] = "'$arg_name' => $arg_value";            }        }        return $arg_list;    }    /**     * Parse is expression     *     * @param string $is_arg     * @param array $tokens     * @return array     */    function _parse_is_expr($is_arg, $tokens)    {        $expr_end = 0;        $negate_expr = false;        if (($first_token = array_shift($tokens)) == 'not') {            $negate_expr = true;            $expr_type = array_shift($tokens);        } else            $expr_type = $first_token;        switch ($expr_type) {            case 'even':                if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') {                    $expr_end++;                    $expr_arg = $tokens[$expr_end++];                    $expr = "!(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))";                } else                    $expr = "!(1 & $is_arg)";                break;            case 'odd':                if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') {                    $expr_end++;                    $expr_arg = $tokens[$expr_end++];                    $expr = "(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))";                } else                    $expr = "(1 & $is_arg)";                break;            case 'div':                if (@$tokens[$expr_end] == 'by') {                    $expr_end++;                    $expr_arg = $tokens[$expr_end++];                    $expr = "!($is_arg % " . $this->_parse_var_props($expr_arg) . ")";                } else {                    $this->_syntax_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__);                }                break;            default:                $this->_syntax_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__);                break;        }        if ($negate_expr) {            $expr = "!($expr)";        }        array_splice($tokens, 0, $expr_end, $expr);        return $tokens;    }    /**     * Parse attribute string     *     * @param string $tag_args     * @return array     */    function _parse_attrs($tag_args)    {        /* Tokenize tag attributes. */        preg_match_all('~(?:' . $this->_obj_call_regexp . '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+)                         )+ |                         [=]                        ~x', $tag_args, $match);        $tokens       = $match[0];        $attrs = array();        /* Parse state:            0 - expecting attribute name            1 - expecting '='            2 - expecting attribute value (not '=') */        $state = 0;        foreach ($tokens as $token) {            switch ($state) {                case 0:                    /* If the token is a valid identifier, we set attribute name                       and go to state 1. */                    if (preg_match('~^\w+$~', $token)) {                        $attr_name = $token;                        $state = 1;                    } else                        $this->_syntax_error("invalid attribute name: '$token'", E_USER_ERROR, __FILE__, __LINE__);                    break;                case 1:                    /* If the token is '=', then we go to state 2. */                    if ($token == '=') {                        $state = 2;                    } else                        $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__);                    break;                case 2:                    /* If token is not '=', we set the attribute value and go to                       state 0. */                    if ($token != '=') {                        /* We booleanize the token if it's a non-quoted possible                           boolean value. */                        if (preg_match('~^(on|yes|true)$~', $token)) {                            $token = 'true';                        } else if (preg_match('~^(off|no|false)$~', $token)) {                            $token = 'false';                        } else if ($token == 'null') {                            $token = 'null';                        } else if (preg_match('~^' . $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) {                            /* treat integer literally */                        } else if (!preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$~', $token)) {                            /* treat as a string, double-quote it escaping quotes */                            $token = '"'.addslashes($token).'"';                        }                        $attrs[$attr_name] = $token;                        $state = 0;                    } else                        $this->_syntax_error("'=' cannot be an attribute value", E_USER_ERROR, __FILE__, __LINE__);                    break;            }            $last_token = $token;        }        if($state != 0) {            if($state == 1) {                $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__);            } else {                $this->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__);            }        }        $this->_parse_vars_props($attrs);        return $attrs;    }    /**     * compile multiple variables and section properties tokens into     * PHP code     *     * @param array $tokens     */    function _parse_vars_props(&$tokens)    {        foreach($tokens as $key => $val) {            $tokens[$key] = $this->_parse_var_props($val);        }    }    /**     * compile single variable and section properties token into     * PHP code     *     * @param string $val     * @param string $tag_attrs     * @return string     */    function _parse_var_props($val)    {        $val = trim($val);        if(preg_match('~^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~', $val, $match)) {            // $ variable or object            $return = $this->_parse_var($match[1]);            $modifiers = $match[2];            if (!empty($this->default_modifiers) && !preg_match('~(^|\|)smarty:nodefaults($|\|)~',$modifiers)) {                $_default_mod_string = implode('|',(array)$this->default_modifiers);                $modifiers = empty($modifiers) ? $_default_mod_string : $_default_mod_string . '|' . $modifiers;            }            $this->_parse_modifiers($return, $modifiers);            return $return;        } elseif (preg_match('~^' . $this->_db_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {                // double quoted text                preg_match('~^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);                $return = $this->_expand_quoted_text($match[1]);                if($match[2] != '') {                    $this->_parse_modifiers($return, $match[2]);                }                return $return;            }        elseif(preg_match('~^' . $this->_num_const_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {                // numerical constant                preg_match('~^(' . $this->_num_const_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);                if($match[2] != '') {                    $this->_parse_modifiers($match[1], $match[2]);                    return $match[1];                }            }        elseif(preg_match('~^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {                // single quoted text                preg_match('~^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);                if($match[2] != '') {                    $this->_parse_modifiers($match[1], $match[2]);                    return $match[1];                }            }        elseif(preg_match('~^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {                // config var                return $this->_parse_conf_var($val);            }        elseif(preg_match('~^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -