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

📄 registry.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
<?php/** * PEAR_Registry * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt.  If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category   pear * @package    PEAR * @author     Stig Bakken <ssb@php.net> * @author     Tomas V. V. Cox <cox@idecnet.com> * @author     Greg Beaver <cellog@php.net> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    CVS: $Id: Registry.php,v 1.35.2.18.2.3 2006/05/22 10:19:33 cellog Exp $ * @link       http://pear.php.net/package/PEAR * @since      File available since Release 0.1 *//** * for PEAR_Error */require_once 'PEAR.php';require_once 'PEAR/DependencyDB.php';define('PEAR_REGISTRY_ERROR_LOCK',   -2);define('PEAR_REGISTRY_ERROR_FORMAT', -3);define('PEAR_REGISTRY_ERROR_FILE',   -4);define('PEAR_REGISTRY_ERROR_CONFLICT', -5);define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);/** * Administration class used to maintain the installed package database. * @category   pear * @package    PEAR * @author     Stig Bakken <ssb@php.net> * @author     Tomas V. V. Cox <cox@idecnet.com> * @author     Greg Beaver <cellog@php.net> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    Release: @package_version@ * @link       http://pear.php.net/package/PEAR * @since      Class available since Release 1.4.0a1 */class PEAR_Registry extends PEAR{    // {{{ properties    /**     * File containing all channel information.     * @var string     */    var $channels = '';    /** Directory where registry files are stored.     * @var string     */    var $statedir = '';    /** File where the file map is stored     * @var string     */    var $filemap = '';    /** Directory where registry files for channels are stored.     * @var string     */    var $channelsdir = '';    /** Name of file used for locking the registry     * @var string     */    var $lockfile = '';    /** File descriptor used during locking     * @var resource     */    var $lock_fp = null;    /** Mode used during locking     * @var int     */    var $lock_mode = 0; // XXX UNUSED    /** Cache of package information.  Structure:     * array(     *   'package' => array('id' => ... ),     *   ... )     * @var array     */    var $pkginfo_cache = array();    /** Cache of file map.  Structure:     * array( '/path/to/file' => 'package', ... )     * @var array     */    var $filemap_cache = array();    /**     * @var false|PEAR_ChannelFile     */    var $_pearChannel;    /**     * @var false|PEAR_ChannelFile     */    var $_peclChannel;    /**     * @var PEAR_DependencyDB     */    var $_dependencyDB;    /**     * @var PEAR_Config     */    var $_config;    // }}}    // {{{ constructor    /**     * PEAR_Registry constructor.     *     * @param string (optional) PEAR install directory (for .php files)     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PEAR channel, if     *        default values are not desired.  Only used the very first time a PEAR     *        repository is initialized     * @param PEAR_ChannelFile PEAR_ChannelFile object representing the PECL channel, if     *        default values are not desired.  Only used the very first time a PEAR     *        repository is initialized     *     * @access public     */    function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,                           $pecl_channel = false)    {        parent::PEAR();        $ds = DIRECTORY_SEPARATOR;        $this->install_dir = $pear_install_dir;        $this->channelsdir = $pear_install_dir.$ds.'.channels';        $this->statedir = $pear_install_dir.$ds.'.registry';        $this->filemap  = $pear_install_dir.$ds.'.filemap';        $this->lockfile = $pear_install_dir.$ds.'.lock';        $this->_pearChannel = $pear_channel;        $this->_peclChannel = $pecl_channel;        $this->_config = false;    }    function hasWriteAccess()    {        if (!@file_exists($this->install_dir)) {            $dir = $this->install_dir;            while ($dir && $dir != '.') {                $dir = dirname($dir); // cd ..                if ($dir != '.' && @file_exists($dir)) {                    if (@is_writeable($dir)) {                        return true;                    } else {                        return false;                    }                }            }            return false;        }        return @is_writeable($this->install_dir);    }    function setConfig(&$config)    {        $this->_config = &$config;    }    function _initializeChannelDirs()    {        static $running = false;        if (!$running) {            $running = true;            $ds = DIRECTORY_SEPARATOR;            if (!is_dir($this->channelsdir) ||                  !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||                  !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||                  !file_exists($this->channelsdir . $ds . '__uri.reg')) {                if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {                    $pear_channel = $this->_pearChannel;                    if (!is_a($pear_channel, 'PEAR_ChannelFile') || !$pear_channel->validate()) {                        if (!class_exists('PEAR_ChannelFile')) {                            require_once 'PEAR/ChannelFile.php';                        }                        $pear_channel = new PEAR_ChannelFile;                        $pear_channel->setName('pear.php.net');                        $pear_channel->setAlias('pear');                        $pear_channel->setServer('pear.php.net');                        $pear_channel->setSummary('PHP Extension and Application Repository');                        $pear_channel->setDefaultPEARProtocols();                        $pear_channel->setBaseURL('REST1.0', 'http://pear.php.net/rest/');                        $pear_channel->setBaseURL('REST1.1', 'http://pear.php.net/rest/');                    } else {                        $pear_channel->setName('pear.php.net');                        $pear_channel->setAlias('pear');                    }                    $pear_channel->validate();                    $this->_addChannel($pear_channel);                }                if (!file_exists($this->channelsdir . $ds . 'pecl.php.net.reg')) {                    $pecl_channel = $this->_peclChannel;                    if (!is_a($pecl_channel, 'PEAR_ChannelFile') || !$pecl_channel->validate()) {                        if (!class_exists('PEAR_ChannelFile')) {                            require_once 'PEAR/ChannelFile.php';                        }                        $pecl_channel = new PEAR_ChannelFile;                        $pecl_channel->setName('pecl.php.net');                        $pecl_channel->setAlias('pecl');                        $pecl_channel->setServer('pecl.php.net');                        $pecl_channel->setSummary('PHP Extension Community Library');                        $pecl_channel->setDefaultPEARProtocols();                        $pecl_channel->setBaseURL('REST1.0', 'http://pecl.php.net/rest/');                        $pecl_channel->setBaseURL('REST1.1', 'http://pecl.php.net/rest/');                        $pecl_channel->setValidationPackage('PEAR_Validator_PECL', '1.0');                    } else {                        $pecl_channel->setName('pecl.php.net');                        $pecl_channel->setAlias('pecl');                    }                    $pecl_channel->validate();                    $this->_addChannel($pecl_channel);                }                if (!file_exists($this->channelsdir . $ds . '__uri.reg')) {                    if (!class_exists('PEAR_ChannelFile')) {                        require_once 'PEAR/ChannelFile.php';                    }                    $private = new PEAR_ChannelFile;                    $private->setName('__uri');                    $private->addFunction('xmlrpc', '1.0', '****');                    $private->setSummary('Pseudo-channel for static packages');                    $this->_addChannel($private);                }                $this->_rebuildFileMap();            }            $running = false;        }    }    function _initializeDirs()    {        $ds = DIRECTORY_SEPARATOR;        // XXX Compatibility code should be removed in the future        // rename all registry files if any to lowercase        if (!OS_WINDOWS && $handle = @opendir($this->statedir)) {            $dest = $this->statedir . $ds;            while (false !== ($file = readdir($handle))) {                if (preg_match('/^.*[A-Z].*\.reg$/', $file)) {                    rename($dest . $file, $dest . strtolower($file));                }            }            closedir($handle);        }        $this->_initializeChannelDirs();        if (!file_exists($this->filemap)) {            $this->_rebuildFileMap();        }        $this->_initializeDepDB();    }    function _initializeDepDB()    {        if (!isset($this->_dependencyDB)) {            static $initializing = false;            if (!$initializing) {                $initializing = true;                if (!$this->_config) { // never used?                    if (OS_WINDOWS) {                        $file = 'pear.ini';                    } else {                        $file = '.pearrc';                    }                    $this->_config = &new PEAR_Config($this->statedir . DIRECTORY_SEPARATOR .                        $file);                    $this->_config->setRegistry($this);                    $this->_config->set('php_dir', $this->install_dir);                }                $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);                if (PEAR::isError($this->_dependencyDB)) {                    // attempt to recover by removing the dep db                    @unlink($this->_config->get('php_dir', null, 'pear.php.net') .                        DIRECTORY_SEPARATOR . '.depdb');                    $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);                    if (PEAR::isError($this->_dependencyDB)) {                        echo $this->_dependencyDB->getMessage();                        die('Unrecoverable error');                    }                }                $initializing = false;            }        }    }    // }}}    // {{{ destructor    /**     * PEAR_Registry destructor.  Makes sure no locks are forgotten.     *     * @access private     */    function _PEAR_Registry()    {        parent::_PEAR();        if (is_resource($this->lock_fp)) {            $this->_unlock();        }    }    // }}}    // {{{ _assertStateDir()    /**     * Make sure the directory where we keep registry files exists.     *     * @return bool TRUE if directory exists, FALSE if it could not be     * created     *     * @access private     */    function _assertStateDir($channel = false)    {        if ($channel && $this->_getChannelFromAlias($channel) != 'pear.php.net') {            return $this->_assertChannelStateDir($channel);        }        static $init = false;        if (!@is_dir($this->statedir)) {            if (!$this->hasWriteAccess()) {                return false;            }            require_once 'System.php';            if (!System::mkdir(array('-p', $this->statedir))) {                return $this->raiseError("could not create directory '{$this->statedir}'");            }            $init = true;        }        $ds = DIRECTORY_SEPARATOR;        if (!@is_dir($this->channelsdir) ||              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg') ||              !file_exists($this->channelsdir . $ds . 'pecl.php.net.reg') ||              !file_exists($this->channelsdir . $ds . '__uri.reg')) {            $init = true;        }        if ($init) {            static $running = false;            if (!$running) {                $running = true;                $this->_initializeDirs();                $running = false;                $init = false;            }        } else {            $this->_initializeDepDB();        }        return true;    }    // }}}    // {{{ _assertChannelStateDir()    /**     * Make sure the directory where we keep registry files exists for a non-standard channel.     *     * @param string channel name     * @return bool TRUE if directory exists, FALSE if it could not be     * created     *     * @access private     */    function _assertChannelStateDir($channel)    {        $ds = DIRECTORY_SEPARATOR;        if (!$channel || $this->_getChannelFromAlias($channel) == 'pear.php.net') {            if (!file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {                $this->_initializeChannelDirs();            }            return $this->_assertStateDir($channel);        }        $channelDir = $this->_channelDirectoryName($channel);        if (!is_dir($this->channelsdir) ||              !file_exists($this->channelsdir . $ds . 'pear.php.net.reg')) {            $this->_initializeChannelDirs();        }        if (!@is_dir($channelDir)) {            if (!$this->hasWriteAccess()) {                return false;            }            require_once 'System.php';            if (!System::mkdir(array('-p', $channelDir))) {                return $this->raiseError("could not create directory '" . $channelDir .                    "'");            }        }        return true;    }    // }}}    // {{{ _assertChannelDir()

⌨️ 快捷键说明

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