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

📄 .nfs0e5f801900000006

📁 基础原形来自 Ourplus,修补跨站脚本攻击漏洞 采用PHP+Mysql+Xml开发的网站流量统计分析系统 ,不影响页面下载速度。 本流量统计系统采用了高效的程序算法和精心优化的数据库结构
💻 NFS0E5F801900000006
📖 第 1 页 / 共 5 页
字号:
        $output .= ' ?>';        return $output;    }    /**     * Compile {include ...} tag     *     * @param string $tag_args     * @return string     */    function _compile_include_php_tag($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        if (empty($attrs['file'])) {            $this->_syntax_error("missing 'file' attribute in include_php tag", E_USER_ERROR, __FILE__, __LINE__);        }        $assign_var = (empty($attrs['assign'])) ? '' : $this->_dequote($attrs['assign']);        $once_var = (empty($attrs['once']) || $attrs['once']=='false') ? 'false' : 'true';        $arg_list = array();        foreach($attrs as $arg_name => $arg_value) {            if($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') {                if(is_bool($arg_value))                    $arg_value = $arg_value ? 'true' : 'false';                $arg_list[] = "'$arg_name' => $arg_value";            }        }        $_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', $arg_list)."))";        return "<?php require_once(SMARTY_CORE_DIR . 'core.smarty_include_php.php');\nsmarty_core_smarty_include_php($_params, \$this); ?>" . $this->_additional_newline;    }    /**     * Compile {section ...} tag     *     * @param string $tag_args     * @return string     */    function _compile_section_start($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        $arg_list = array();        $output = '<?php ';        $section_name = $attrs['name'];        if (empty($section_name)) {            $this->_syntax_error("missing section name", E_USER_ERROR, __FILE__, __LINE__);        }        $output .= "unset(\$this->_sections[$section_name]);\n";        $section_props = "\$this->_sections[$section_name]";        foreach ($attrs as $attr_name => $attr_value) {            switch ($attr_name) {                case 'loop':                    $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n";                    break;                case 'show':                    if (is_bool($attr_value))                        $show_attr_value = $attr_value ? 'true' : 'false';                    else                        $show_attr_value = "(bool)$attr_value";                    $output .= "{$section_props}['show'] = $show_attr_value;\n";                    break;                case 'name':                    $output .= "{$section_props}['$attr_name'] = $attr_value;\n";                    break;                case 'max':                case 'start':                    $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n";                    break;                case 'step':                    $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n";                    break;                default:                    $this->_syntax_error("unknown section attribute - '$attr_name'", E_USER_ERROR, __FILE__, __LINE__);                    break;            }        }        if (!isset($attrs['show']))            $output .= "{$section_props}['show'] = true;\n";        if (!isset($attrs['loop']))            $output .= "{$section_props}['loop'] = 1;\n";        if (!isset($attrs['max']))            $output .= "{$section_props}['max'] = {$section_props}['loop'];\n";        else            $output .= "if ({$section_props}['max'] < 0)\n" .                       "    {$section_props}['max'] = {$section_props}['loop'];\n";        if (!isset($attrs['step']))            $output .= "{$section_props}['step'] = 1;\n";        if (!isset($attrs['start']))            $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";        else {            $output .= "if ({$section_props}['start'] < 0)\n" .                       "    {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" .                       "else\n" .                       "    {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";        }        $output .= "if ({$section_props}['show']) {\n";        if (!isset($attrs['start']) && !isset($attrs['step']) && !isset($attrs['max'])) {            $output .= "    {$section_props}['total'] = {$section_props}['loop'];\n";        } else {            $output .= "    {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n";        }        $output .= "    if ({$section_props}['total'] == 0)\n" .                   "        {$section_props}['show'] = false;\n" .                   "} else\n" .                   "    {$section_props}['total'] = 0;\n";        $output .= "if ({$section_props}['show']):\n";        $output .= "            for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1;                 {$section_props}['iteration'] <= {$section_props}['total'];                 {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n";        $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n";        $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n";        $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n";        $output .= "{$section_props}['first']      = ({$section_props}['iteration'] == 1);\n";        $output .= "{$section_props}['last']       = ({$section_props}['iteration'] == {$section_props}['total']);\n";        $output .= "?>";        return $output;    }    /**     * Compile {foreach ...} tag.     *     * @param string $tag_args     * @return string     */    function _compile_foreach_start($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        $arg_list = array();        if (empty($attrs['from'])) {            return $this->_syntax_error("foreach: missing 'from' attribute", E_USER_ERROR, __FILE__, __LINE__);        }        $from = $attrs['from'];        if (empty($attrs['item'])) {            return $this->_syntax_error("foreach: missing 'item' attribute", E_USER_ERROR, __FILE__, __LINE__);        }        $item = $this->_dequote($attrs['item']);        if (!preg_match('~^\w+$~', $item)) {            return $this->_syntax_error("'foreach: item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__);        }        if (isset($attrs['key'])) {            $key  = $this->_dequote($attrs['key']);            if (!preg_match('~^\w+$~', $key)) {                return $this->_syntax_error("foreach: 'key' must to be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__);            }            $key_part = "\$this->_tpl_vars['$key'] => ";        } else {            $key = null;            $key_part = '';        }        if (isset($attrs['name'])) {            $name = $attrs['name'];        } else {            $name = null;        }        $output = '<?php ';        if (isset($name)) {            $foreach_props = "\$this->_foreach[$name]";            $output .= "if (isset(\$this->_foreach[$name])) unset(\$this->_foreach[$name]);\n";            $output .= "{$foreach_props}['total'] = count(\$_from = (array)$from);\n";            $output .= "{$foreach_props}['show'] = {$foreach_props}['total'] > 0;\n";            $output .= "if ({$foreach_props}['show']):\n";            $output .= "{$foreach_props}['iteration'] = 0;\n";            $output .= "    foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n";            $output .= "        {$foreach_props}['iteration']++;\n";            $output .= "        {$foreach_props}['first'] = ({$foreach_props}['iteration'] == 1);\n";            $output .= "        {$foreach_props}['last']  = ({$foreach_props}['iteration'] == {$foreach_props}['total']);\n";        } else {            $output .= "if (count(\$_from = (array)$from)):\n";            $output .= "    foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n";        }        $output .= '?>';        return $output;    }    /**     * Compile {capture} .. {/capture} tags     *     * @param boolean $start true if this is the {capture} tag     * @param string $tag_args     * @return string     */    function _compile_capture_tag($start, $tag_args = '')    {        $attrs = $this->_parse_attrs($tag_args);        if ($start) {            if (isset($attrs['name']))                $buffer = $attrs['name'];            else                $buffer = "'default'";            if (isset($attrs['assign']))                $assign = $attrs['assign'];            else                $assign = null;            $output = "<?php ob_start(); ?>";            $this->_capture_stack[] = array($buffer, $assign);        } else {            list($buffer, $assign) = array_pop($this->_capture_stack);            $output = "<?php \$this->_smarty_vars['capture'][$buffer] = ob_get_contents(); ";            if (isset($assign)) {                $output .= " \$this->assign($assign, ob_get_contents());";            }            $output .= "ob_end_clean(); ?>";        }        return $output;    }    /**     * Compile {if ...} tag     *     * @param string $tag_args     * @param boolean $elseif if true, uses elseif instead of if     * @return string     */    function _compile_if_tag($tag_args, $elseif = false)    {        /* Tokenize args for 'if' tag. */        preg_match_all('~(?>                ' . $this->_obj_call_regexp . '(?:' . $this->_mod_regexp . '*)? | # valid object call                ' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)?    | # var or quoted string                \-?0[xX][0-9a-fA-F]+|\-?\d+(?:\.\d+)?|\.\d+|!==|===|==|!=|<>|<<|>>|<=|>=|\&\&|\|\||\(|\)|,|\!|\^|=|\&|\~|<|>|\||\%|\+|\-|\/|\*|\@    | # valid non-word token                \b\w+\b                                                        | # valid word token                \S+                                                           # anything else                )~x', $tag_args, $match);        $tokens = $match[0];        // make sure we have balanced parenthesis        $token_count = array_count_values($tokens);        if(isset($token_count['(']) && $token_count['('] != $token_count[')']) {            $this->_syntax_error("unbalanced parenthesis in if statement", E_USER_ERROR, __FILE__, __LINE__);        }        $is_arg_stack = array();        for ($i = 0; $i < count($tokens); $i++) {            $token = &$tokens[$i];            switch (strtolower($token)) {                case '!':                case '%':                case '!==':                case '==':                case '===':                case '>':                case '<':                case '!=':                case '<>':                case '<<':                case '>>':                case '<=':                case '>=':                case '&&':                case '||':                case '|':                case '^':                case '&':                case '~':                case ')':                case ',':                case '+':                case '-':                case '*':                case '/':                case '@':                    break;                case 'eq':                    $token = '==';                    break;                case 'ne':                case 'neq':                    $token = '!=';                    break;                case 'lt':                    $token = '<';                    break;                case 'le':                case 'lte':                    $token = '<=';                    break;                case 'gt':                    $token = '>';                    break;

⌨️ 快捷键说明

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