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

📄 validator.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
                        continue 2;                    } else {                        $unfoundtags[] = $choice['tag'];                        $mismatch = true;                    }                    if (!isset($choice['multiple']) || $choice['multiple'] != '*') {                        $loose = false;                    } else {                        $optionaltags[] = $choice['tag'];                    }                }                if (!$loose) {                    $this->_invalidTagOrder($unfoundtags, $key, $root);                    return false;                }            } else {                if ($key != $test['tag']) {                    if (isset($test['multiple']) && $test['multiple'] != '*') {                        $unfoundtags[] = $test['tag'];                        $this->_invalidTagOrder($unfoundtags, $key, $root);                        return false;                    } else {                        if ($key) {                            $mismatch = true;                        }                        $unfoundtags[] = $test['tag'];                        $optionaltags[] = $test['tag'];                    }                    if (!isset($test['multiple'])) {                        $this->_invalidTagOrder($unfoundtags, $key, $root);                        return false;                    }                    continue;                } else {                    $unfoundtags = $optionaltags = array();                    $mismatch = false;                }                $key = next($keys);                while ($key == 'attribs' || $key == '_contents') {                    $key = next($keys);                }                if ($key && $key != $test['tag'] && isset($test['multiple'])) {                    $unfoundtags[] = $test['tag'];                    $optionaltags[] = $test['tag'];                    $mismatch = true;                }                $ret &= $this->_processAttribs($test, $tag, $root);                continue;            }        }        if (!$mismatch && count($optionaltags)) {            // don't error out on any optional tags            $unfoundtags = array_diff($unfoundtags, $optionaltags);        }        if (count($unfoundtags)) {            $this->_invalidTagOrder($unfoundtags, $key, $root);        } elseif ($key) {            // unknown tags            $this->_invalidTagOrder('*no tags allowed here*', $key, $root);            while ($key = next($keys)) {                $this->_invalidTagOrder('*no tags allowed here*', $key, $root);            }        }        return $ret;    }    function _processAttribs($choice, $tag, $context)    {        if (isset($choice['attribs'])) {            if (!is_array($tag)) {                $tag = array($tag);            }            $tags = $tag;            if (!isset($tags[0])) {                $tags = array($tags);            }            $ret = true;            foreach ($tags as $i => $tag) {                if (!is_array($tag) || !isset($tag['attribs'])) {                    foreach ($choice['attribs'] as $attrib) {                        if ($attrib{0} != '?') {                            $ret &= $this->_tagHasNoAttribs($choice['tag'],                                $context);                            continue 2;                        }                    }                }                foreach ($choice['attribs'] as $attrib) {                    if ($attrib{0} != '?') {                        if (!isset($tag['attribs'][$attrib])) {                            $ret &= $this->_tagMissingAttribute($choice['tag'],                                $attrib, $context);                        }                    }                }            }            return $ret;        }        return true;    }    function _processStructure($key)    {        $ret = array();        if (count($pieces = explode('|', $key)) > 1) {            foreach ($pieces as $piece) {                $ret['choices'][] = $this->_processStructure($piece);            }            return $ret;        }        $multi = $key{0};        if ($multi == '+' || $multi == '*') {            $ret['multiple'] = $key{0};            $key = substr($key, 1);        }        if (count($attrs = explode('->', $key)) > 1) {            $ret['tag'] = array_shift($attrs);            $ret['attribs'] = $attrs;        } else {            $ret['tag'] = $key;        }        return $ret;    }    function _validateStabilityVersion()    {        $structure = array('release', 'api');        $a = $this->_stupidSchemaValidate($structure, $this->_packageInfo['version'], '<version>');        $a &= $this->_stupidSchemaValidate($structure, $this->_packageInfo['stability'], '<stability>');        if ($a) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $this->_packageInfo['version']['release'])) {                $this->_invalidVersion('release', $this->_packageInfo['version']['release']);            }            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $this->_packageInfo['version']['api'])) {                $this->_invalidVersion('api', $this->_packageInfo['version']['api']);            }            if (!in_array($this->_packageInfo['stability']['release'],                  array('snapshot', 'devel', 'alpha', 'beta', 'stable'))) {                $this->_invalidState('release', $this->_packageinfo['stability']['release']);            }            if (!in_array($this->_packageInfo['stability']['api'],                  array('devel', 'alpha', 'beta', 'stable'))) {                $this->_invalidState('api', $this->_packageinfo['stability']['api']);            }        }    }    function _validateMaintainers()    {        $structure =            array(                'name',                'user',                'email',                'active',            );        foreach (array('lead', 'developer', 'contributor', 'helper') as $type) {            if (!isset($this->_packageInfo[$type])) {                continue;            }            if (isset($this->_packageInfo[$type][0])) {                foreach ($this->_packageInfo[$type] as $lead) {                    $this->_stupidSchemaValidate($structure, $lead, '<' . $type . '>');                }            } else {                $this->_stupidSchemaValidate($structure, $this->_packageInfo[$type],                    '<' . $type . '>');            }        }    }    function _validatePhpDep($dep, $installcondition = false)    {        $structure = array(            'min',            '*max',            '*exclude',        );        $type = $installcondition ? '<installcondition><php>' : '<dependencies><required><php>';        $this->_stupidSchemaValidate($structure, $dep, $type);        if (isset($dep['min'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?(?:-[a-zA-Z0-9]+)?$/',                  $dep['min'])) {                $this->_invalidVersion($type . '<min>', $dep['min']);            }        }        if (isset($dep['max'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?(?:-[a-zA-Z0-9]+)?$/',                  $dep['max'])) {                $this->_invalidVersion($type . '<max>', $dep['max']);            }        }    }    function _validatePearinstallerDep($dep)    {        $structure = array(            'min',            '*max',            '*recommended',            '*exclude',        );        $this->_stupidSchemaValidate($structure, $dep, '<dependencies><required><pearinstaller>');        if (isset($dep['min'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $dep['min'])) {                $this->_invalidVersion('<dependencies><required><pearinstaller><min>',                    $dep['min']);            }        }        if (isset($dep['max'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $dep['max'])) {                $this->_invalidVersion('<dependencies><required><pearinstaller><max>',                    $dep['max']);            }        }        if (isset($dep['recommended'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $dep['recommended'])) {                $this->_invalidVersion('<dependencies><required><pearinstaller><recommended>',                    $dep['recommended']);            }        }        if (isset($dep['exclude'])) {            if (!is_array($dep['exclude'])) {                $dep['exclude'] = array($dep['exclude']);            }            foreach ($dep['exclude'] as $exclude) {                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                      $exclude)) {                    $this->_invalidVersion('<dependencies><required><pearinstaller><exclude>',                        $exclude);                }            }        }    }    function _validatePackageDep($dep, $group, $type = '<package>')    {        if (isset($dep['uri'])) {            if (isset($dep['conflicts'])) {                $structure = array(                    'name',                    'uri',                    'conflicts',                    '*providesextension',                );            } else {                $structure = array(                    'name',                    'uri',                    '*providesextension',                );            }        } else {            if (isset($dep['conflicts'])) {                $structure = array(                    'name',                    'channel',                    '*min',                    '*max',                    '*exclude',                    'conflicts',                    '*providesextension',                );            } else {                $structure = array(                    'name',                    'channel',                    '*min',                    '*max',                    '*recommended',                    '*exclude',                    '*nodefault',                    '*providesextension',                );            }        }        if (isset($dep['name'])) {            $type .= '<name>' . $dep['name'] . '</name>';        }        $this->_stupidSchemaValidate($structure, $dep, '<dependencies>' . $group . $type);        if (isset($dep['uri']) && (isset($dep['min']) || isset($dep['max']) ||              isset($dep['recommended']) || isset($dep['exclude']))) {            $this->_uriDepsCannotHaveVersioning('<dependencies>' . $group . $type);        }        if (isset($dep['channel']) && strtolower($dep['channel']) == '__uri') {            $this->_DepchannelCannotBeUri('<dependencies>' . $group . $type);        }        if (isset($dep['min'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $dep['min'])) {                $this->_invalidVersion('<dependencies>' . $group . $type . '<min>', $dep['min']);            }        }        if (isset($dep['max'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $dep['max'])) {                $this->_invalidVersion('<dependencies>' . $group . $type . '<max>', $dep['max']);            }        }        if (isset($dep['recommended'])) {            if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                  $dep['recommended'])) {                $this->_invalidVersion('<dependencies>' . $group . $type . '<recommended>',                    $dep['recommended']);            }        }        if (isset($dep['exclude'])) {            if (!is_array($dep['exclude'])) {                $dep['exclude'] = array($dep['exclude']);            }            foreach ($dep['exclude'] as $exclude) {                if (!preg_match('/^\d+(?:\.\d+)*(?:[a-zA-Z]+\d*)?$/',                      $exclude)) {                    $this->_invalidVersion('<dependencies>' . $group . $type . '<exclude>',                        $exclude);                }            }        }    }    function _validateSubpackageDep($dep, $group)    {

⌨️ 快捷键说明

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