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

📄 registry.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
            return true;        }        return $a;    }    // }}}    // {{{ _addChannel()    /**     * @param PEAR_ChannelFile Channel object     * @param donotuse     * @param string Last-Modified HTTP tag from remote request     * @return boolean|PEAR_Error True on creation, false if it already exists     */    function _addChannel($channel, $update = false, $lastmodified = false)    {        if (!is_a($channel, 'PEAR_ChannelFile')) {            return false;        }        if (!$channel->validate()) {            return false;        }        if (file_exists($this->_channelFileName($channel->getName()))) {            if (!$update) {                return false;            }            $checker = $this->_getChannel($channel->getName());            if (PEAR::isError($checker)) {                return $checker;            }            if ($channel->getAlias() != $checker->getAlias()) {                @unlink($this->_getChannelAliasFileName($checker->getAlias()));            }        } else {            if ($update && !in_array($channel->getName(), array('pear.php.net', 'pecl.php.net'))) {                return false;            }        }        $ret = $this->_assertChannelDir();        if (PEAR::isError($ret)) {            return $ret;        }        $ret = $this->_assertChannelStateDir($channel->getName());        if (PEAR::isError($ret)) {            return $ret;        }        if ($channel->getAlias() != $channel->getName()) {            if (file_exists($this->_getChannelAliasFileName($channel->getAlias())) &&                  $this->_getChannelFromAlias($channel->getAlias()) != $channel->getName()) {                $channel->setAlias($channel->getName());            }            if (!$this->hasWriteAccess()) {                return false;            }            $fp = @fopen($this->_getChannelAliasFileName($channel->getAlias()), 'w');            if (!$fp) {                return false;            }            fwrite($fp, $channel->getName());            fclose($fp);        }        if (!$this->hasWriteAccess()) {            return false;        }        $fp = @fopen($this->_channelFileName($channel->getName()), 'wb');        if (!$fp) {            return false;        }        $info = $channel->toArray();        if ($lastmodified) {            $info['_lastmodified'] = $lastmodified;        } else {            $info['_lastmodified'] = date('r');        }        fwrite($fp, serialize($info));        fclose($fp);        return true;    }    // }}}    // {{{ _deleteChannel()    /**     * Deletion fails if there are any packages installed from the channel     * @param string|PEAR_ChannelFile channel name     * @return boolean|PEAR_Error True on deletion, false if it doesn't exist     */    function _deleteChannel($channel)    {        if (!is_string($channel)) {            if (is_a($channel, 'PEAR_ChannelFile')) {                if (!$channel->validate()) {                    return false;                }                $channel = $channel->getName();            } else {                return false;            }        }        if ($this->_getChannelFromAlias($channel) == '__uri') {            return false;        }        if ($this->_getChannelFromAlias($channel) == 'pecl.php.net') {            return false;        }        if (!$this->_channelExists($channel)) {            return false;        }        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {            return false;        }        $channel = $this->_getChannelFromAlias($channel);        if ($channel == 'pear.php.net') {            return false;        }        $test = $this->_listChannelPackages($channel);        if (count($test)) {            return false;        }        $test = @rmdir($this->_channelDirectoryName($channel));        if (!$test) {            return false;        }        $file = $this->_getChannelAliasFileName($this->_getAlias($channel));        if (@file_exists($file)) {            $test = @unlink($file);            if (!$test) {                return false;            }        }        $file = $this->_channelFileName($channel);        $ret = @unlink($file);        return $ret;    }    // }}}    // {{{ _isChannelAlias()    /**     * Determine whether a channel exists in the registry     * @param string Channel Alias     * @return boolean     */    function _isChannelAlias($alias)    {        return file_exists($this->_getChannelAliasFileName($alias));    }    // }}}    // {{{ _packageInfo()    /**     * @param string|null     * @param string|null     * @param string|null     * @return array|null     * @access private     */    function _packageInfo($package = null, $key = null, $channel = 'pear.php.net')    {        if ($package === null) {            if ($channel === null) {                $channels = $this->_listChannels();                $ret = array();                foreach ($channels as $channel) {                    $channel = strtolower($channel);                    $ret[$channel] = array();                    $packages = $this->_listPackages($channel);                    foreach ($packages as $package) {                        $ret[$channel][] = $this->_packageInfo($package, null, $channel);                    }                }                return $ret;            }            $ps = $this->_listPackages($channel);            if (!count($ps)) {                return array();            }            return array_map(array(&$this, '_packageInfo'),                             $ps, array_fill(0, count($ps), null),                             array_fill(0, count($ps), $channel));        }        $fp = $this->_openPackageFile($package, 'r', $channel);        if ($fp === null) {            return null;        }        $rt = get_magic_quotes_runtime();        set_magic_quotes_runtime(0);        clearstatcache();        if (function_exists('file_get_contents')) {            $this->_closePackageFile($fp);            $data = file_get_contents($this->_packageFileName($package, $channel));        } else {            $data = fread($fp, filesize($this->_packageFileName($package, $channel)));            $this->_closePackageFile($fp);        }        set_magic_quotes_runtime($rt);        $data = unserialize($data);        if ($key === null) {            return $data;        }        // compatibility for package.xml version 2.0        if (isset($data['old'][$key])) {            return $data['old'][$key];        }        if (isset($data[$key])) {            return $data[$key];        }        return null;    }    // }}}    // {{{ _channelInfo()    /**     * @param string Channel name     * @param bool whether to strictly retrieve info of channels, not just aliases     * @return array|null     */    function _channelInfo($channel, $noaliases = false)    {        if (!$this->_channelExists($channel, $noaliases)) {            return null;        }        $fp = $this->_openChannelFile($channel, 'r');        if ($fp === null) {            return null;        }        $rt = get_magic_quotes_runtime();        set_magic_quotes_runtime(0);        clearstatcache();        if (function_exists('file_get_contents')) {            $this->_closeChannelFile($fp);            $data = file_get_contents($this->_channelFileName($channel));        } else {            $data = fread($fp, filesize($this->_channelFileName($channel)));            $this->_closeChannelFile($fp);        }        set_magic_quotes_runtime($rt);        $data = unserialize($data);        return $data;    }    // }}}    // {{{ _listChannels()    function _listChannels()    {        $channellist = array();        $dp = @opendir($this->channelsdir);        if (!$dp  || !@is_dir($this->channelsdir)) {            return array('pear.php.net', 'pecl.php.net', '__uri');        }        while ($ent = readdir($dp)) {            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {                continue;            }            if ($ent == '__uri.reg') {                $channellist[] = '__uri';                continue;            }            $channellist[] = str_replace('_', '/', substr($ent, 0, -4));        }        closedir($dp);        if (!in_array('pear.php.net', $channellist)) {            $channellist[] = 'pear.php.net';        }        if (!in_array('pecl.php.net', $channellist)) {            $channellist[] = 'pecl.php.net';        }        if (!in_array('__uri', $channellist)) {            $channellist[] = '__uri';        }        return $channellist;    }    // }}}    // {{{ _listPackages()    function _listPackages($channel = false)    {        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {            return $this->_listChannelPackages($channel);        }        $pkglist = array();        $dp = @opendir($this->statedir);        if (!$dp) {            return $pkglist;        }        while ($ent = readdir($dp)) {            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {                continue;            }            $pkglist[] = substr($ent, 0, -4);        }        closedir($dp);        return $pkglist;    }    // }}}    // {{{ _listChannelPackages()    function _listChannelPackages($channel)    {        $pkglist = array();        $dp = @opendir($this->_channelDirectoryName($channel));        if (!$dp) {            return $pkglist;        }        while ($ent = readdir($dp)) {            if ($ent{0} == '.' || substr($ent, -4) != '.reg') {                continue;            }            $pkglist[] = substr($ent, 0, -4);        }        closedir($dp);        return $pkglist;    }    // }}}        function _listAllPackages()    {        $ret = array();        foreach ($this->_listChannels() as $channel) {            $ret[$channel] = $this->_listPackages($channel);        }        return $ret;    }    /**     * Add an installed package to the registry     * @param string package name     * @param array package info (parsed by PEAR_Common::infoFrom*() methods)     * @return bool success of saving     * @access private     */    function _addPackage($package, $info)    {        if ($this->_packageExists($package)) {            return false;        }        $fp = $this->_openPackageFile($package, 'wb');        if ($fp === null) {            return false;        }        $info['_lastmodified'] = time();        fwrite($fp, serialize($info));        $this->_closePackageFile($fp);        if (isset($info['filelist'])) {            $this->_rebuildFileMap();        }        return true;    }    /**     * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @return bool     * @access private     */    function _addPackage2($info)    {        if (!$info->validate()) {            if (class_exists('PEAR_Common')) {                $ui = PEAR_Frontend::singleton();                if ($ui) {                    foreach ($info->getValidationWarnings() as $err) {                        $ui->log(2, $err['message']);                    }                }            }            return false;        }        $channel = $info->getChannel();        $package = $info->getPackage();        $save = $info;        if ($this->_packageExists($package, $channel)) {            return false;        }        if (!$this->_channelExists($channel, true)) {            return false;        }        $info = $info->toArray(true);        if (!$info) {            return false;        }        $fp = $this->_openPackageFile($package, 'wb', $channel);        if ($fp === null) {            return false;        }        $info['_lastmodified'] = time();        fwrite($fp, serialize($info));        $this->_closePackageFile($fp);        $this->_rebuildFileMap();        return true;    }    /**     * @param string Package name     * @param array parsed package.xml 1.0     * @param bool this parameter is only here for BC.  Don't use it.     * @access private     */    function _updatePackage($package, $info, $merge = true)    {        $oldinfo = $this->_packageInfo($package);        if (empty($oldinfo)) {

⌨️ 快捷键说明

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