10.php

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

PHP
812
字号
        }        $pinfo = $this->_rest->retrieveCacheFirst($base . 'p/' . strtolower($package) . '/' .             'info.xml');        if (PEAR::isError($pinfo)) {            return PEAR::raiseError('Package "' . $package .                '" does not have REST info xml available');        }        $releaseinfo = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .             $release['v'] . '.xml');        if (PEAR::isError($releaseinfo)) {            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .                '" does not have REST xml available');        }        $packagexml = $this->_rest->retrieveCacheFirst($base . 'r/' . strtolower($package) . '/' .            'deps.' . $release['v'] . '.txt', false, true);        if (PEAR::isError($packagexml)) {            return PEAR::raiseError('Package "' . $package . '" Version "' . $release['v'] .                '" does not have REST dependency information available');        }        $packagexml = unserialize($packagexml);        if (!$packagexml) {            $packagexml = array();        }        $allinfo = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .            '/allreleases.xml');        if (!is_array($allinfo['r']) || !isset($allinfo['r'][0])) {            $allinfo['r'] = array($allinfo['r']);        }        $compatible = false;        foreach ($allinfo['r'] as $release) {            if ($release['v'] != $releaseinfo['v']) {                continue;            }            if (!isset($release['co'])) {                break;            }            $compatible = array();            if (!is_array($release['co']) || !isset($release['co'][0])) {                $release['co'] = array($release['co']);            }            foreach ($release['co'] as $entry) {                $comp = array();                $comp['name'] = $entry['p'];                $comp['channel'] = $entry['c'];                $comp['min'] = $entry['min'];                $comp['max'] = $entry['max'];                if (isset($entry['x']) && !is_array($entry['x'])) {                    $comp['exclude'] = $entry['x'];                }                $compatible[] = $comp;            }            if (count($compatible) == 1) {                $compatible = $compatible[0];            }            break;        }        if (isset($pinfo['dc']) && isset($pinfo['dp'])) {            if (is_array($pinfo['dp'])) {                $deprecated = array('channel' => (string) $pinfo['dc'],                                    'package' => trim($pinfo['dp']['_content']));            } else {                $deprecated = array('channel' => (string) $pinfo['dc'],                                    'package' => trim($pinfo['dp']));            }        } else {            $deprecated = false;        }        if ($found) {            return                 array('version' => $releaseinfo['v'],                      'info' => $packagexml,                      'package' => $releaseinfo['p']['_content'],                      'stability' => $releaseinfo['st'],                      'url' => $releaseinfo['g'],                      'compatible' => $compatible,                      'deprecated' => $deprecated,                );        } else {            return                array('version' => $releaseinfo['v'],                      'package' => $releaseinfo['p']['_content'],                      'stability' => $releaseinfo['st'],                      'info' => $packagexml,                      'compatible' => $compatible,                      'deprecated' => $deprecated,                      'php' => $phpversion                );        }    }    function listPackages($base)    {        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml');        if (PEAR::isError($packagelist)) {            return $packagelist;        }        if (!is_array($packagelist) || !isset($packagelist['p'])) {            return array();        }        if (!is_array($packagelist['p'])) {            $packagelist['p'] = array($packagelist['p']);        }        return $packagelist['p'];    }    /**     * List all categories of a REST server     *     * @param string $base base URL of the server     * @return array of categorynames     */    function listCategories($base)    {        $categories = array();        // c/categories.xml does not exist;        // check for every package its category manually        // This is SLOOOWWWW : ///        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml');        if (PEAR::isError($packagelist)) {            return $packagelist;        }        if (!is_array($packagelist) || !isset($packagelist['p'])) {            $ret = array();            return $ret;        }        if (!is_array($packagelist['p'])) {            $packagelist['p'] = array($packagelist['p']);        }        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);        foreach ($packagelist['p'] as $package) {                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml');                if (PEAR::isError($inf)) {                    PEAR::popErrorHandling();                    return $inf;                }                $cat = $inf['ca']['_content'];                if (!isset($categories[$cat])) {                    $categories[$cat] = $inf['ca'];                }        }        return array_values($categories);    }    /**     * List a category of a REST server     *     * @param string $base base URL of the server     * @param string $category name of the category     * @param boolean $info also download full package info     * @return array of packagenames     */    function listCategory($base, $category, $info=false)    {        // gives '404 Not Found' error when category doesn't exist        $packagelist = $this->_rest->retrieveData($base.'c/'.urlencode($category).'/packages.xml');        if (PEAR::isError($packagelist)) {            return $packagelist;        }        if (!is_array($packagelist) || !isset($packagelist['p'])) {            return array();        }        if (!is_array($packagelist['p']) ||            !isset($packagelist['p'][0])) { // only 1 pkg            $packagelist = array($packagelist['p']);        } else {            $packagelist = $packagelist['p'];        }        if ($info == true) {            // get individual package info            PEAR::pushErrorHandling(PEAR_ERROR_RETURN);            foreach ($packagelist as $i => $packageitem) {                $url = sprintf('%s'.'r/%s/latest.txt',                        $base,                        strtolower($packageitem['_content']));                $version = $this->_rest->retrieveData($url);                if (PEAR::isError($version)) {                    break; // skipit                }                $url = sprintf('%s'.'r/%s/%s.xml',                        $base,                        strtolower($packageitem['_content']),                        $version);                $info = $this->_rest->retrieveData($url);                if (PEAR::isError($info)) {                    break; // skipit                }                $packagelist[$i]['info'] = $info;            }            PEAR::popErrorHandling();        }        return $packagelist;    }    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false)    {        $packagelist = $this->_rest->retrieveData($base . 'p/packages.xml');        if (PEAR::isError($packagelist)) {            return $packagelist;        }        if ($this->_rest->config->get('verbose') > 0) {            $ui = &PEAR_Frontend::singleton();            $ui->log('Retrieving data...0%', false);        }        $ret = array();        if (!is_array($packagelist) || !isset($packagelist['p'])) {            return $ret;        }        if (!is_array($packagelist['p'])) {            $packagelist['p'] = array($packagelist['p']);        }        // only search-packagename = quicksearch !        if ($searchpackage && (!$searchsummary || empty($searchpackage))) {            $newpackagelist = array();            foreach ($packagelist['p'] as $package) {                if (!empty($searchpackage) && stristr($package, $searchpackage) !== false) {                    $newpackagelist[] = $package;                }            }            $packagelist['p'] = $newpackagelist;        }        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);        $next = .1;        foreach ($packagelist['p'] as $progress => $package) {            if ($this->_rest->config->get('verbose') > 0) {                if ($progress / count($packagelist['p']) >= $next) {                    if ($next == .5) {                        $ui->log('50%', false);                    } else {                        $ui->log('.', false);                    }                    $next += .1;                }            }            if ($basic) { // remote-list command                if ($dostable) {                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .                        '/stable.txt');                } else {                    $latest = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .                        '/latest.txt');                }                if (PEAR::isError($latest)) {                    $latest = false;                }                $info = array('stable' => $latest);            } else { // list-all command                $inf = $this->_rest->retrieveData($base . 'p/' . strtolower($package) . '/info.xml');                if (PEAR::isError($inf)) {                    PEAR::popErrorHandling();                    return $inf;                }                if ($searchpackage) {                    $found = (!empty($searchpackage) && stristr($package, $searchpackage) !== false);                    if (!$found && !(isset($searchsummary) && !empty($searchsummary)                        && (stristr($inf['s'], $searchsummary) !== false                            || stristr($inf['d'], $searchsummary) !== false)))                    {                        continue;                    };                }                $releases = $this->_rest->retrieveData($base . 'r/' . strtolower($package) .                    '/allreleases.xml');                if (PEAR::isError($releases)) {                    continue;                }

⌨️ 快捷键说明

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