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

📄 package.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
            return;        }        $pname = $this->getParsedPackage();        if (!$pname) {            return;        }        $deps = $this->getDeps();        if (!$deps) {            return;        }        if (isset($deps['required'])) { // package.xml 2.0            return $this->_detect2($deps, $pname, $options, $params);        } else {            return $this->_detect1($deps, $pname, $options, $params);        }    }    function setValidated()    {        $this->_validated = true;    }    function alreadyValidated()    {        return $this->_validated;    }    /**     * Remove packages to be downloaded that are already installed     * @param array of PEAR_Downloader_Package objects     * @static     */    function removeInstalled(&$params)    {        if (!isset($params[0])) {            return;        }        $options = $params[0]->_downloader->getOptions();        if (!isset($options['downloadonly'])) {            foreach ($params as $i => $param) {                // remove self if already installed with this version                // this does not need any pecl magic - we only remove exact matches                if ($param->_installRegistry->packageExists($param->getPackage(), $param->getChannel())) {                    if (version_compare($param->_installRegistry->packageInfo($param->getPackage(), 'version',                          $param->getChannel()), $param->getVersion(), '==')) {                        if (!isset($options['force'])) {                            $info = $param->getParsedPackage();                            unset($info['version']);                            unset($info['state']);                            if (!isset($options['soft'])) {                                $param->_downloader->log(1, 'Skipping package "' .                                    $param->getShortName() .                                    '", already installed as version ' .                                    $param->_installRegistry->packageInfo($param->getPackage(),                                        'version', $param->getChannel()));                            }                            $params[$i] = false;                        }                    } elseif (!isset($options['force']) && !isset($options['upgrade']) &&                          !isset($options['soft'])) {                        $info = $param->getParsedPackage();                        $param->_downloader->log(1, 'Skipping package "' .                            $param->getShortName() .                            '", already installed as version ' .                            $param->_installRegistry->packageInfo($param->getPackage(), 'version',                                $param->getChannel()));                        $params[$i] = false;                    }                }            }        }        PEAR_Downloader_Package::removeDuplicates($params);    }    function _detect2($deps, $pname, $options, $params)    {        $this->_downloadDeps = array();        $groupnotfound = false;        foreach (array('package', 'subpackage') as $packagetype) {            // get required dependency group            if (isset($deps['required'][$packagetype])) {                if (isset($deps['required'][$packagetype][0])) {                    foreach ($deps['required'][$packagetype] as $dep) {                        if (isset($dep['conflicts'])) {                            // skip any package that this package conflicts with                            continue;                        }                        $ret = $this->_detect2Dep($dep, $pname, 'required', $params);                        if (is_array($ret)) {                            $this->_downloadDeps[] = $ret;                        }                    }                } else {                    $dep = $deps['required'][$packagetype];                    if (!isset($dep['conflicts'])) {                        // skip any package that this package conflicts with                        $ret = $this->_detect2Dep($dep, $pname, 'required', $params);                        if (is_array($ret)) {                            $this->_downloadDeps[] = $ret;                        }                    }                }            }            // get optional dependency group, if any            if (isset($deps['optional'][$packagetype])) {                $skipnames = array();                if (!isset($deps['optional'][$packagetype][0])) {                    $deps['optional'][$packagetype] = array($deps['optional'][$packagetype]);                }                foreach ($deps['optional'][$packagetype] as $dep) {                    $skip = false;                    if (!isset($options['alldeps'])) {                        $dep['package'] = $dep['name'];                        if (!isset($options['soft'])) {                            $this->_downloader->log(3, 'Notice: package "' .                              $this->_registry->parsedPackageNameToString($this->getParsedPackage(),                                    true) . '" optional dependency "' .                                $this->_registry->parsedPackageNameToString(array('package' =>                                    $dep['name'], 'channel' => 'pear.php.net'), true) .                                '" will not be automatically downloaded');                        }                        $skipnames[] = $this->_registry->parsedPackageNameToString($dep, true);                        $skip = true;                        unset($dep['package']);                    }                    if (!($ret = $this->_detect2Dep($dep, $pname, 'optional', $params))) {                        $dep['package'] = $dep['name'];                        if (@$skipnames[count($skipnames) - 1] ==                              $this->_registry->parsedPackageNameToString($dep, true)) {                            array_pop($skipnames);                        }                    }                    if (!$skip && is_array($ret)) {                        $this->_downloadDeps[] = $ret;                    }                }                if (count($skipnames)) {                    if (!isset($options['soft'])) {                        $this->_downloader->log(1, 'Did not download optional dependencies: ' .                            implode(', ', $skipnames) .                            ', use --alldeps to download automatically');                    }                }            }            // get requested dependency group, if any            $groupname = $this->getGroup();            $explicit = $this->_explicitGroup;            if (!$groupname) {                if ($this->canDefault()) {                    $groupname = 'default'; // try the default dependency group                } else {                    continue;                }            }            if ($groupnotfound) {                continue;            }            if (isset($deps['group'])) {                if (isset($deps['group']['attribs'])) {                    if (strtolower($deps['group']['attribs']['name']) == strtolower($groupname)) {                        $group = $deps['group'];                    } elseif ($explicit) {                        if (!isset($options['soft'])) {                            $this->_downloader->log(0, 'Warning: package "' .                                $this->_registry->parsedPackageNameToString($pname, true) .                                '" has no dependency ' . 'group named "' . $groupname . '"');                        }                        $groupnotfound = true;                        continue;                    }                } else {                    $found = false;                    foreach ($deps['group'] as $group) {                        if (strtolower($group['attribs']['name']) == strtolower($groupname)) {                            $found = true;                            break;                        }                    }                    if (!$found) {                        if ($explicit) {                            if (!isset($options['soft'])) {                                $this->_downloader->log(0, 'Warning: package "' .                                    $this->_registry->parsedPackageNameToString($pname, true) .                                    '" has no dependency ' . 'group named "' . $groupname . '"');                            }                        }                        $groupnotfound = true;                        continue;                    }                }            }            if (isset($group)) {                if (isset($group[$packagetype])) {                    if (isset($group[$packagetype][0])) {                        foreach ($group[$packagetype] as $dep) {                            $ret = $this->_detect2Dep($dep, $pname, 'dependency group "' .                                $group['attribs']['name'] . '"', $params);                            if (is_array($ret)) {                                $this->_downloadDeps[] = $ret;                            }                        }                    } else {                        $ret = $this->_detect2Dep($group[$packagetype], $pname,                            'dependency group "' .                            $group['attribs']['name'] . '"', $params);                        if (is_array($ret)) {                            $this->_downloadDeps[] = $ret;                        }                    }                }            }        }    }    function _detect2Dep($dep, $pname, $group, $params)    {        if (isset($dep['conflicts'])) {            return true;        }        $options = $this->_downloader->getOptions();        if (isset($dep['uri'])) {            return array('uri' => $dep['uri'], 'dep' => $dep);;        }        $testdep = $dep;        $testdep['package'] = $dep['name'];        if (PEAR_Downloader_Package::willDownload($testdep, $params)) {            $dep['package'] = $dep['name'];            if (!isset($options['soft'])) {                $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group .                    ' dependency "' .                    $this->_registry->parsedPackageNameToString($dep, true) .                    '", will be installed');            }            return false;        }        $options = $this->_downloader->getOptions();        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);        if ($this->_explicitState) {            $pname['state'] = $this->_explicitState;        }        $url =            $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);        if (PEAR::isError($url)) {            PEAR::popErrorHandling();            return $url;        }        $dep['package'] = $dep['name'];        $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params, $group == 'optional' &&            !isset($options['alldeps']));        PEAR::popErrorHandling();        if (PEAR::isError($ret)) {            if (!isset($options['soft'])) {                $this->_downloader->log(0, $ret->getMessage());            }            return false;        } else {            // check to see if a dep is already installed and is the same or newer            if (!isset($dep['min']) && !isset($dep['max']) && !isset($dep['recommended'])) {                $oper = 'has';            } else {                $oper = 'gt';            }            // do not try to move this before getDepPackageDownloadURL            // we can't determine whether upgrade is necessary until we know what            // version would be downloaded            if (!isset($options['force']) && $this->isInstalled($ret, $oper)) {                $version = $this->_installRegistry->packageInfo($dep['name'], 'version',                    $dep['channel']);                $dep['package'] = $dep['name'];                if (!isset($options['soft'])) {                    $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group .                        ' dependency "' .                    $this->_registry->parsedPackageNameToString($dep, true) .                        '" version ' . $url['version'] . ', already installed as version ' .                        $version);                }                return false;            }        }        if (isset($dep['nodefault'])) {            $ret['nodefault'] = true;        }        return $ret;    }    function _detect1($deps, $pname, $options, $params)    {        $this->_downloadDeps = array();        $skipnames = array();        foreach ($deps as $dep) {            $nodownload = false;            if ($dep['type'] == 'pkg') {                $dep['channel'] = 'pear.php.net';                $dep['package'] = $dep['name'];                switch ($dep['rel']) {                    case 'not' :                        continue 2;                    case 'ge' :                    case 'eq' :                    case 'gt' :                    case 'has' :                        $group = (!isset($dep['optional']) || $dep['optional'] == 'no') ?                            'required' :                            'optional';                        if (PEAR_Downloader_Package::willDownload($dep, $params)) {                            $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group                                . ' dependency "' .                                $this->_registry->parsedPackageNameToString($dep, true) .                                '", will be installed');                            continue 2;                        }                        $fakedp = new PEAR_PackageFile_v1;                        $fakedp->setPackage($dep['name']);                        // skip internet check if we are not upgrading (bug #5810)                        if (!isset($options['upgrade']) && $this->isInstalled(                              $fakedp, $dep['rel'])) {                            $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group                                . ' dependency "' .                                $this->_registry->parsedPackageNameToString($dep, true) .                                '", is already installed');                            continue 2;                        }                }                PEAR::pushErrorHandling(PEAR_ERROR_RETURN);                if ($this->_explicitState) {                    $pname['state'] = $this->_explicitState;                }                $url =

⌨️ 快捷键说明

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