downloader.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 1,643 行 · 第 1/5 页

PHP
1,643
字号
                            '" to update');                    }                } while (false);                if ($params[$i] && !isset($this->_options['downloadonly'])) {                    if (isset($this->_options['packagingroot'])) {                        $checkdir = $this->_prependPath(                            $this->config->get('php_dir', null, $params[$i]->getChannel()),                            $this->_options['packagingroot']);                    } else {                        $checkdir = $this->config->get('php_dir',                            null, $params[$i]->getChannel());                    }                    while ($checkdir && $checkdir != '/' && !file_exists($checkdir)) {                        $checkdir = dirname($checkdir);                    }                    if ($checkdir == '.') {                        $checkdir = '/';                    }                    if (!is_writeable($checkdir)) {                        return PEAR::raiseError('Cannot install, php_dir for channel "' .                            $params[$i]->getChannel() . '" is not writeable by the current user');                    }                }            }        }        unset($channelschecked);        PEAR_Downloader_Package::removeDuplicates($params);        if (!count($params)) {            $a = array();            return $a;        }        if (!isset($this->_options['nodeps']) && !isset($this->_options['offline'])) {            $reverify = true;            while ($reverify) {                $reverify = false;                foreach ($params as $i => $param) {                    //PHP Bug 40768 / PEAR Bug #10944                    //Nested foreaches fail in PHP 5.2.1                    key($params);                    $ret = $params[$i]->detectDependencies($params);                    if (PEAR::isError($ret)) {                        $reverify = true;                        $params[$i] = false;                        PEAR_Downloader_Package::removeDuplicates($params);                        if (!isset($this->_options['soft'])) {                            $this->log(0, $ret->getMessage());                        }                        continue 2;                    }                }            }        }        if (isset($this->_options['offline'])) {            $this->log(3, 'Skipping dependency download check, --offline specified');        }        if (!count($params)) {            $a = array();            return $a;        }        while (PEAR_Downloader_Package::mergeDependencies($params));        PEAR_Downloader_Package::removeDuplicates($params, true);        $errorparams = array();        if (PEAR_Downloader_Package::detectStupidDuplicates($params, $errorparams)) {            if (count($errorparams)) {                foreach ($errorparams as $param) {                    $name = $this->_registry->parsedPackageNameToString($param->getParsedPackage());                    $this->pushError('Duplicate package ' . $name . ' found', PEAR_INSTALLER_FAILED);                }                $a = array();                return $a;            }        }        PEAR_Downloader_Package::removeInstalled($params);        if (!count($params)) {            $this->pushError('No valid packages found', PEAR_INSTALLER_FAILED);            $a = array();            return $a;        }        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;        }        $somefailed = false;        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) .                        '"');                }                $somefailed = true;                continue;            }            $newparams[] = &$params[$i];            $ret[] = array('file' => $pf->getArchiveFile(),                                   'info' => &$pf,                                   'pkg' => $pf->getPackage());        }        if ($somefailed) {            // remove params that did not download successfully            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);            $err = $this->analyzeDependencies($newparams, true);            PEAR::popErrorHandling();            if (!count($newparams)) {                $this->pushError('Download failed', PEAR_INSTALLER_FAILED);                $a = array();                return $a;            }        }        $this->_downloadedPackages = $ret;        return $newparams;    }    /**     * @param array all packages to be installed     */    function analyzeDependencies(&$params, $force = false)    {        $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() && !$force) {                    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;                }

⌨️ 快捷键说明

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