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

📄 downloader.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 4 页
字号:
        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);        $err = $this->analyzeDependencies($params);        PEAR::popErrorHandling();        if (!count($params)) {            $this->pushError('No valid packages found', PEAR_INSTALLER_FAILED);            $a = array();            return $a;        }        $ret = array();        $newparams = array();        if (isset($this->_options['pretend'])) {            return $params;        }        foreach ($params as $i => $package) {            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);            $pf = &$params[$i]->download();            PEAR::staticPopErrorHandling();            if (PEAR::isError($pf)) {                if (!isset($this->_options['soft'])) {                    $this->log(1, $pf->getMessage());                    $this->log(0, 'Error: cannot download "' .                        $this->_registry->parsedPackageNameToString($package->getParsedPackage(),                            true) .                        '"');                }                continue;            }            $newparams[] = &$params[$i];            $ret[] = array('file' => $pf->getArchiveFile(),                                   'info' => &$pf,                                   'pkg' => $pf->getPackage());        }        $this->_downloadedPackages = $ret;        return $newparams;    }    /**     * @param array all packages to be installed     */    function analyzeDependencies(&$params)    {        $hasfailed = $failed = false;        if (isset($this->_options['downloadonly'])) {            return;        }        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);        $redo = true;        $reset = false;        while ($redo) {            $redo = false;            foreach ($params as $i => $param) {                $deps = $param->getDeps();                if (!$deps) {                    $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),                        $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);                    if ($param->getType() == 'xmlrpc') {                        $send = $param->getDownloadURL();                    } else {                        $send = $param->getPackageFile();                    }                    $installcheck = $depchecker->validatePackage($send, $this, $params);                    if (PEAR::isError($installcheck)) {                        if (!isset($this->_options['soft'])) {                            $this->log(0, $installcheck->getMessage());                        }                        $hasfailed = true;                        $params[$i] = false;                        $reset = true;                        $redo = true;                        $failed = false;                        PEAR_Downloader_Package::removeDuplicates($params);                        continue 2;                    }                    continue;                }                if (!$reset && $param->alreadyValidated()) {                    continue;                }                if (count($deps)) {                    $depchecker = &$this->getDependency2Object($this->config, $this->getOptions(),                        $param->getParsedPackage(), PEAR_VALIDATE_DOWNLOADING);                    if ($param->getType() == 'xmlrpc') {                        $send = $param->getDownloadURL();                    } else {                        $send = $param->getPackageFile();                    }                    $installcheck = $depchecker->validatePackage($send, $this, $params);                    if (PEAR::isError($installcheck)) {                        if (!isset($this->_options['soft'])) {                            $this->log(0, $installcheck->getMessage());                        }                        $hasfailed = true;                        $params[$i] = false;                        $reset = true;                        $redo = true;                        $failed = false;                        PEAR_Downloader_Package::removeDuplicates($params);                        continue 2;                    }                    $failed = false;                    if (isset($deps['required'])) {                        foreach ($deps['required'] as $type => $dep) {                            // note: Dependency2 will never return a PEAR_Error if ignore-errors                            // is specified, so soft is needed to turn off logging                            if (!isset($dep[0])) {                                if (PEAR::isError($e = $depchecker->{"validate{$type}Dependency"}($dep,                                      true, $params))) {                                    $failed = true;                                    if (!isset($this->_options['soft'])) {                                        $this->log(0, $e->getMessage());                                    }                                } elseif (is_array($e) && !$param->alreadyValidated()) {                                    if (!isset($this->_options['soft'])) {                                        $this->log(0, $e[0]);                                    }                                }                            } else {                                foreach ($dep as $d) {                                    if (PEAR::isError($e =                                          $depchecker->{"validate{$type}Dependency"}($d,                                          true, $params))) {                                        $failed = true;                                        if (!isset($this->_options['soft'])) {                                            $this->log(0, $e->getMessage());                                        }                                    } elseif (is_array($e) && !$param->alreadyValidated()) {                                        if (!isset($this->_options['soft'])) {                                            $this->log(0, $e[0]);                                        }                                    }                                }                            }                        }                        if (isset($deps['optional'])) {                            foreach ($deps['optional'] as $type => $dep) {                                if (!isset($dep[0])) {                                    if (PEAR::isError($e =                                          $depchecker->{"validate{$type}Dependency"}($dep,                                          false, $params))) {                                        $failed = true;                                        if (!isset($this->_options['soft'])) {                                            $this->log(0, $e->getMessage());                                        }                                    } elseif (is_array($e) && !$param->alreadyValidated()) {                                        if (!isset($this->_options['soft'])) {                                            $this->log(0, $e[0]);                                        }                                    }                                } else {                                    foreach ($dep as $d) {                                        if (PEAR::isError($e =                                              $depchecker->{"validate{$type}Dependency"}($d,                                              false, $params))) {                                            $failed = true;                                            if (!isset($this->_options['soft'])) {                                                $this->log(0, $e->getMessage());                                            }                                        } elseif (is_array($e) && !$param->alreadyValidated()) {                                            if (!isset($this->_options['soft'])) {                                                $this->log(0, $e[0]);                                            }                                        }                                    }                                }                            }                        }                        $groupname = $param->getGroup();                        if (isset($deps['group']) && $groupname) {                            if (!isset($deps['group'][0])) {                                $deps['group'] = array($deps['group']);                            }                            $found = false;                            foreach ($deps['group'] as $group) {                                if ($group['attribs']['name'] == $groupname) {                                    $found = true;                                    break;                                }                            }                            if ($found) {                                unset($group['attribs']);                                foreach ($group as $type => $dep) {                                    if (!isset($dep[0])) {                                        if (PEAR::isError($e =                                              $depchecker->{"validate{$type}Dependency"}($dep,                                              false, $params))) {                                            $failed = true;                                            if (!isset($this->_options['soft'])) {                                                $this->log(0, $e->getMessage());                                            }                                        } elseif (is_array($e) && !$param->alreadyValidated()) {                                            if (!isset($this->_options['soft'])) {                                                $this->log(0, $e[0]);                                            }                                        }                                    } else {                                        foreach ($dep as $d) {                                            if (PEAR::isError($e =                                                  $depchecker->{"validate{$type}Dependency"}($d,                                                  false, $params))) {                                                $failed = true;                                                if (!isset($this->_options['soft'])) {                                                    $this->log(0, $e->getMessage());                                                }                                            } elseif (is_array($e) && !$param->alreadyValidated()) {                                                if (!isset($this->_options['soft'])) {                                                    $this->log(0, $e[0]);                                                }                                            }                                        }                                    }                                }                            }                        }                    } else {                        foreach ($deps as $dep) {                            if (PEAR::isError($e = $depchecker->validateDependency1($dep, $params))) {                                $failed = true;                                if (!isset($this->_options['soft'])) {                                    $this->log(0, $e->getMessage());                                }                            } elseif (is_array($e) && !$param->alreadyValidated()) {                                if (!isset($this->_options['soft'])) {                                    $this->log(0, $e[0]);                                }                            }                        }                    }                    $params[$i]->setValidated();                }                if ($failed) {                    $hasfailed = true;                    $params[$i] = false;                    $reset = true;                    $redo = true;                    $failed = false;                    PEAR_Downloader_Package::removeDuplicates($params);                    continue 2;                }            }        }        PEAR::staticPopErrorHandling();        if ($hasfailed && (isset($this->_options['ignore-errors']) ||              isset($this->_options['nodeps']))) {            // this is probably not needed, but just in case            if (!isset($this->_options['soft'])) {                $this->log(0, 'WARNING: dependencies failed');            }        }    }    /**     * Retrieve the directory that downloads will happen in     * @access private     * @return string     */    function getDownloadDir()    {        if (isset($this->_downloadDir)) {            return $this->_downloadDir;        }        $downloaddir = $this->config->get('download_dir');        if (empty($downloaddir)) {            if (!class_exists('System')) {                require_once 'System.php';            }            if (PEAR::isError($downloaddir = System::mktemp('-d'))) {                return $downloaddir;            }            $this->log(3, '+ tmp dir created at ' . $downloaddir);        }        return $this->_downloadDir = $downloaddir;    }    function setDownloadDir($dir)    {        $this->_downloadDir = $dir;    }    // }}}    // {{{ configSet()    function configSet($key, $value, $layer = 'user', $channel = false)    {        $this->config->set($key, $value, $layer, $channel);        $this->_preferredState = $this->config->get('preferred_state', null, $channel);        if (!$this->_preferredState) {            // don't inadvertantly use a non-set preferred_state            $this->_preferredState = null;        }    }    // }}}    // {{{ setOptions()    function setOptions($options)    {        $this->_options = $options;    }    // }}}    // {{{ setOptions()    function getOptions()    {        return $this->_options;    }    // }}}    /**     * For simpler unit-testing     * @param PEAR_Config     * @param int     * @param string     */    function &getPackagefileObject(&$c, $d, $t = false)    {        if (!class_exists('PEAR_PackageFile')) {            require_once 'PEAR/PackageFile.php';        }        $a = &new PEAR_PackageFile($c, $d, $t);        return $a;    }    // {{{ _getPackageDownloadUrl()    /**     * @param array output of {@link parsePackageName()}     * @access private     */    function _getPackageDownloadUrl($parr)    {        $curchannel = $this->config->get('default_channel');        $this->configSet('default_channel', $parr['channel']);        // getDownloadURL returns an array.  On error, it only contains information        // on the latest release as array(version, info).  On success it contains        // array(version, info, download url string)        $state = isset($parr['state']) ? $parr['state'] : $this->config->get('preferred_state');        if (!$this->_registry->channelExists($parr['channel'])) {            do {                if ($this->config->get('auto_discover')) {                    if ($this->discover($parr['channel'])) {                        break;                    }                }                $this->configSet('default_channel', $curchannel);                return PEAR::raiseError('Unknown remote channel: ' . $remotechannel);            } while (false);        }        $chan = &$this->_registry->getChannel($parr['channel']);        if (PEAR::isError($chan)) {            return $chan;        }        $version = $this->_registry->packageInfo($parr['package'], 'version',            $parr['channel']);        if ($chan->supportsREST($this->config->get('preferred_mirror')) &&              $base = $chan->getBaseURL('REST1.0', $this->config->get('preferred_mirror'))) {            $rest = &$this->config->getREST('1.0', $this->_options);            if (!isset($parr['version']) && !isset($parr['state']) && $version                  && !isset($this->_options['downloadonly'])) {                $url = $rest->getDownloadURL($base, $parr, $state, $version);            } else {                $url = $rest->getDownloadURL($base, $parr, $state, false);            }            if (PEAR::isError($url)) {                $this->configSet('default_channel', $curchannel);                return $url;            }            if ($parr['channel'] != $curchannel) {                $this->configSet('default_channel', $curchannel);            }            if (!is_array($url)) {                return $url;            }            $url['raw'] = false; // no checking is necessary for REST            if (!is_array($url['info'])) {                return PEAR::raiseError('Invalid remote dependencies retrieved from REST - ' .                    'this should never happen');            }            if (isset($url['info']['required']) || $url['compatible']) {                require_once 'PEAR/PackageFile/v2.php';

⌨️ 快捷键说明

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