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

📄 dependencydb.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
        $data = $this->_getDepDB();        unset($this->_cache);        if (is_object($pkg)) {            $channel = strtolower($pkg->getChannel());            $package = strtolower($pkg->getPackage());        } else {            $channel = strtolower($pkg['channel']);            $package = strtolower($pkg['package']);        }        if (!isset($data['dependencies'][$channel][$package])) {            return true;        }        foreach ($data['dependencies'][$channel][$package] as $dep) {            $found = false;            if (isset($dep['dep']['uri'])) {                $depchannel = '__uri';            } else {                $depchannel = strtolower($dep['dep']['channel']);            }            if (isset($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {                foreach ($data['packages'][$depchannel][strtolower($dep['dep']['name'])] as                      $i => $info) {                    if ($info['channel'] == $channel &&                          $info['package'] == $package) {                        $found = true;                        break;                    }                }            }            if ($found) {                unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])][$i]);                if (!count($data['packages'][$depchannel][strtolower($dep['dep']['name'])])) {                    unset($data['packages'][$depchannel][strtolower($dep['dep']['name'])]);                    if (!count($data['packages'][$depchannel])) {                        unset($data['packages'][$depchannel]);                    }                } else {                    $data['packages'][$depchannel][strtolower($dep['dep']['name'])] =                        array_values(                            $data['packages'][$depchannel][strtolower($dep['dep']['name'])]);                }            }        }        unset($data['dependencies'][$channel][$package]);        if (!count($data['dependencies'][$channel])) {            unset($data['dependencies'][$channel]);        }        if (!count($data['dependencies'])) {            unset($data['dependencies']);        }        if (!count($data['packages'])) {            unset($data['packages']);        }        $this->_writeDepDB($data);    }    /**     * Rebuild the dependency DB by reading registry entries.     * @return true|PEAR_Error     */    function rebuildDB()    {        $depdb = array('_version' => $this->_version);        if (!$this->hasWriteAccess()) {            // allow startup for read-only with older Registry            return $depdb;        }        $packages = $this->_registry->listAllPackages();        foreach ($packages as $channel => $ps) {            foreach ($ps as $package) {                $package = $this->_registry->getPackage($package, $channel);                $this->_setPackageDeps($depdb, $package);            }        }        $error = $this->_writeDepDB($depdb);        if (PEAR::isError($error)) {            return $error;        }        $this->_cache = $depdb;        return true;    }    /**     * Register usage of the dependency DB to prevent race conditions     * @param int one of the LOCK_* constants     * @return true|PEAR_Error     * @access private     */    function _lock($mode = LOCK_EX)    {        if (!eregi('Windows 9', php_uname())) {            if ($mode != LOCK_UN && is_resource($this->_lockFp)) {                // XXX does not check type of lock (LOCK_SH/LOCK_EX)                return true;            }            $open_mode = 'w';            // XXX People reported problems with LOCK_SH and 'w'            if ($mode === LOCK_SH) {                if (@!is_file($this->_lockfile)) {                    touch($this->_lockfile);                }                $open_mode = 'r';            }            if (!is_resource($this->_lockFp)) {                $this->_lockFp = @fopen($this->_lockfile, $open_mode);            }            if (!is_resource($this->_lockFp)) {                return PEAR::raiseError("could not create Dependency lock file" .                                         (isset($php_errormsg) ? ": " . $php_errormsg : ""));            }            if (!(int)flock($this->_lockFp, $mode)) {                switch ($mode) {                    case LOCK_SH: $str = 'shared';    break;                    case LOCK_EX: $str = 'exclusive'; break;                    case LOCK_UN: $str = 'unlock';    break;                    default:      $str = 'unknown';   break;                }                return PEAR::raiseError("could not acquire $str lock ($this->_lockfile)");            }        }        return true;    }    /**     * Release usage of dependency DB     * @return true|PEAR_Error     * @access private     */    function _unlock()    {        $ret = $this->_lock(LOCK_UN);        if (is_resource($this->_lockFp)) {            fclose($this->_lockFp);        }        $this->_lockFp = null;        return $ret;    }    /**     * Load the dependency database from disk, or return the cache     * @return array|PEAR_Error     */    function _getDepDB()    {        if (!$this->hasWriteAccess()) {            return array('_version' => $this->_version);        }        if (isset($this->_cache)) {            return $this->_cache;        }        if (!$fp = fopen($this->_depdb, 'r')) {            $err = PEAR::raiseError("Could not open dependencies file `".$this->_depdb."'");            return $err;        }        $rt = get_magic_quotes_runtime();        set_magic_quotes_runtime(0);        clearstatcache();        if (function_exists('file_get_contents')) {            fclose($fp);            $data = unserialize(file_get_contents($this->_depdb));        } else {            $data = unserialize(fread($fp, filesize($this->_depdb)));            fclose($fp);        }        set_magic_quotes_runtime($rt);        $this->_cache = $data;        return $data;    }    /**     * Write out the dependency database to disk     * @param array the database     * @return true|PEAR_Error     * @access private     */    function _writeDepDB(&$deps)    {        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {            return $e;        }        if (!$fp = fopen($this->_depdb, 'wb')) {            $this->_unlock();            return PEAR::raiseError("Could not open dependencies file `".$this->_depdb."' for writing");        }        $rt = get_magic_quotes_runtime();        set_magic_quotes_runtime(0);        fwrite($fp, serialize($deps));        set_magic_quotes_runtime($rt);        fclose($fp);        $this->_unlock();        $this->_cache = $deps;        return true;    }    /**     * Register all dependencies from a package in the dependencies database, in essence     * "installing" the package's dependency information     * @param array the database     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @access private     */    function _setPackageDeps(&$data, &$pkg)    {        $pkg->setConfig($this->_config);        if ($pkg->getPackagexmlVersion() == '1.0') {            $gen = &$pkg->getDefaultGenerator();            $deps = $gen->dependenciesToV2();        } else {            $deps = $pkg->getDeps(true);        }        if (!$deps) {            return;        }        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())]            = array();        if (isset($deps['required']['package'])) {            if (!isset($deps['required']['package'][0])) {                $deps['required']['package'] = array($deps['required']['package']);            }            foreach ($deps['required']['package'] as $dep) {                $this->_registerDep($data, $pkg, $dep, 'required');            }        }        if (isset($deps['optional']['package'])) {            if (!isset($deps['optional']['package'][0])) {                $deps['optional']['package'] = array($deps['optional']['package']);            }            foreach ($deps['optional']['package'] as $dep) {                $this->_registerDep($data, $pkg, $dep, 'optional');            }        }        if (isset($deps['required']['subpackage'])) {            if (!isset($deps['required']['subpackage'][0])) {                $deps['required']['subpackage'] = array($deps['required']['subpackage']);            }            foreach ($deps['required']['subpackage'] as $dep) {                $this->_registerDep($data, $pkg, $dep, 'required');            }        }        if (isset($deps['optional']['subpackage'])) {            if (!isset($deps['optional']['subpackage'][0])) {                $deps['optional']['subpackage'] = array($deps['optional']['subpackage']);            }            foreach ($deps['optional']['subpackage'] as $dep) {                $this->_registerDep($data, $pkg, $dep, 'optional');            }        }        if (isset($deps['group'])) {            if (!isset($deps['group'][0])) {                $deps['group'] = array($deps['group']);            }            foreach ($deps['group'] as $group) {                if (isset($group['package'])) {                    if (!isset($group['package'][0])) {                        $group['package'] = array($group['package']);                    }                    foreach ($group['package'] as $dep) {                        $this->_registerDep($data, $pkg, $dep, 'optional',                            $group['attribs']['name']);                    }                }                if (isset($group['subpackage'])) {                    if (!isset($group['subpackage'][0])) {                        $group['subpackage'] = array($group['subpackage']);                    }                    foreach ($group['subpackage'] as $dep) {                        $this->_registerDep($data, $pkg, $dep, 'optional',                            $group['attribs']['name']);                    }                }            }        }        if ($data['dependencies'][strtolower($pkg->getChannel())]              [strtolower($pkg->getPackage())] == array()) {            unset($data['dependencies'][strtolower($pkg->getChannel())]              [strtolower($pkg->getPackage())]);            if (!count($data['dependencies'][strtolower($pkg->getChannel())])) {                unset($data['dependencies'][strtolower($pkg->getChannel())]);            }        }    }    /**     * @param array the database     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @param array the specific dependency     * @param required|optional whether this is a required or an optional dep     * @param string|false dependency group this dependency is from, or false for ordinary dep     */    function _registerDep(&$data, &$pkg, $dep, $type, $group = false)    {        $info = array(            'dep' => $dep,            'type' => $type,            'group' => $group);        if (isset($dep['channel'])) {            $depchannel = $dep['channel'];        } else {            $depchannel = '__uri';        }        $data['dependencies'][strtolower($pkg->getChannel())][strtolower($pkg->getPackage())][]            = $info;        if (isset($data['packages'][strtolower($depchannel)][strtolower($dep['name'])])) {            $found = false;            foreach ($data['packages'][strtolower($depchannel)][strtolower($dep['name'])]                  as $i => $p) {                if ($p['channel'] == strtolower($pkg->getChannel()) &&                      $p['package'] == strtolower($pkg->getPackage())) {                    $found = true;                    break;                }            }            if (!$found) {                $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]                    = array('channel' => strtolower($pkg->getChannel()),                            'package' => strtolower($pkg->getPackage()));            }        } else {            $data['packages'][strtolower($depchannel)][strtolower($dep['name'])][]                = array('channel' => strtolower($pkg->getChannel()),                        'package' => strtolower($pkg->getPackage()));        }    }}?>

⌨️ 快捷键说明

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