packagefile.php

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

PHP
475
字号
            PEAR_ErrorStack::staticPush('PEAR_PackageFile',                PEAR_PACKAGEFILE_ERROR_NO_PACKAGEVERSION,                'warning', array('xml' => $data), 'package.xml "' . $file .                    '" has no package.xml <package> version');            $object = &$this->parserFactory('1.0');            $object->setConfig($this->_config);            $pf = $object->parse($data, $file, $archive);            if (PEAR::isError($pf)) {                return $pf;            }            if ($this->_rawReturn) {                return $pf;            }            if ($pf->validate($state)) {                if ($this->_logger) {                    if ($pf->getValidationWarnings(false)) {                        foreach ($pf->getValidationWarnings() as $warning) {                            $this->_logger->log(0, 'WARNING: ' . $warning['message']);                        }                    }                }                if (method_exists($pf, 'flattenFilelist')) {                    $pf->flattenFilelist(); // for v2                }                return $pf;            } else {                $a = PEAR::raiseError('Parsing of package.xml from file "' . $file . '" failed',                    2, null, null, $pf->getValidationWarnings());                return $a;            }        }    }    /**     * Register a temporary file or directory.  When the destructor is     * executed, all registered temporary files and directories are     * removed.     *     * @param string  $file  name of file or directory     * @return  void     */    function addTempFile($file)    {        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;    }    /**     * Create a PEAR_PackageFile_v* from a compresed Tar or Tgz file.     * @access  public     * @param string contents of package.xml file     * @param int package state (one of PEAR_VALIDATE_* constants)     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @using   Archive_Tar to extract the files     * @using   fromPackageFile() to load the package after the package.xml     *          file is extracted.     */    function &fromTgzFile($file, $state)    {        if (!class_exists('Archive_Tar')) {            require_once 'Archive/Tar.php';        }        $tar = new Archive_Tar($file);        if ($this->_debug <= 1) {            $tar->pushErrorHandling(PEAR_ERROR_RETURN);        }        $content = $tar->listContent();        if ($this->_debug <= 1) {            $tar->popErrorHandling();        }        if (!is_array($content)) {            if (is_string($file) && strlen($file < 255) &&                  (!file_exists($file) || !@is_file($file))) {                $ret = PEAR::raiseError("could not open file \"$file\"");                return $ret;            }            $file = realpath($file);            $ret = PEAR::raiseError("Could not get contents of package \"$file\"".                                     '. Invalid tgz file.');            return $ret;        } else {            if (!count($content) && !@is_file($file)) {                $ret = PEAR::raiseError("could not open file \"$file\"");                return $ret;            }        }        $xml = null;        $origfile = $file;        foreach ($content as $file) {            $name = $file['filename'];            if ($name == 'package2.xml') { // allow a .tgz to distribute both versions                $xml = $name;                break;            }            if ($name == 'package.xml') {                $xml = $name;                break;            } elseif (ereg('package.xml$', $name, $match)) {                $xml = $name;                break;            }        }        if ($this->_tmpdir) {            $tmpdir = $this->_tmpdir;        } else {            $tmpdir = System::mkTemp(array('-d', 'pear'));            PEAR_PackageFile::addTempFile($tmpdir);        }        $this->_extractErrors();        PEAR::staticPushErrorHandling(PEAR_ERROR_CALLBACK, array($this, '_extractErrors'));        if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {            $extra = implode("\n", $this->_extractErrors());            if ($extra) {                $extra = ' ' . $extra;            }            PEAR::staticPopErrorHandling();            $ret = PEAR::raiseError('could not extract the package.xml file from "' .                $origfile . '"' . $extra);            return $ret;        }        PEAR::staticPopErrorHandling();        $ret = &PEAR_PackageFile::fromPackageFile("$tmpdir/$xml", $state, $origfile);        return $ret;    }    /**     * helper for extracting Archive_Tar errors     * @var array     * @access private     */    var $_extractErrors = array();    /**     * helper callback for extracting Archive_Tar errors     *     * @param PEAR_Error|null $err     * @return array     * @access private     */    function _extractErrors($err = null)    {        static $errors = array();        if ($err === null) {            $e = $errors;            $errors = array();            return $e;        }        $errors[] = $err->getMessage();    }    /**     * Create a PEAR_PackageFile_v* from a package.xml file.     *     * @access public     * @param   string  $descfile  name of package xml file     * @param   int     $state package state (one of PEAR_VALIDATE_* constants)     * @param   string|false $archive name of the archive this package.xml came     *          from, if any     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @uses    PEAR_PackageFile::fromXmlString to create the oject after the     *          XML is loaded from the package.xml file.     */    function &fromPackageFile($descfile, $state, $archive = false)    {        if (is_string($descfile) && strlen($descfile) < 255 &&             (!file_exists($descfile) || !is_file($descfile) || !is_readable($descfile) ||             (!$fp = @fopen($descfile, 'r')))) {            $a = PEAR::raiseError("Unable to open $descfile");            return $a;        }        // read the whole thing so we only get one cdata callback        // for each block of cdata        fclose($fp);        $data = file_get_contents($descfile);        $ret = &PEAR_PackageFile::fromXmlString($data, $state, $descfile, $archive);        return $ret;    }    /**     * Create a PEAR_PackageFile_v* from a .tgz archive or package.xml file.     *     * This method is able to extract information about a package from a .tgz     * archive or from a XML package definition file.     *     * @access public     * @param   string  $info file name     * @param   int     $state package state (one of PEAR_VALIDATE_* constants)     * @return  PEAR_PackageFile_v1|PEAR_PackageFile_v2     * @uses    fromPackageFile() if the file appears to be XML     * @uses    fromTgzFile() to load all non-XML files     */    function &fromAnyFile($info, $state)    {        if (is_dir($info)) {            $dir_name = realpath($info);            if (file_exists($dir_name . '/package.xml')) {                $info = PEAR_PackageFile::fromPackageFile($dir_name .  '/package.xml', $state);            } elseif (file_exists($dir_name .  '/package2.xml')) {                $info = PEAR_PackageFile::fromPackageFile($dir_name .  '/package2.xml', $state);            } else {                $info = PEAR::raiseError("No package definition found in '$info' directory");            }            return $info;        }        $fp = false;        if (is_string($info) && strlen($info) < 255 &&             (file_exists($info) || ($fp = @fopen($info, 'r')))) {            if ($fp) {                fclose($fp);            }            $tmp = substr($info, -4);            if ($tmp == '.xml') {                $info = &PEAR_PackageFile::fromPackageFile($info, $state);            } elseif ($tmp == '.tar' || $tmp == '.tgz') {                $info = &PEAR_PackageFile::fromTgzFile($info, $state);            } else {                $fp = fopen($info, "r");                $test = fread($fp, 5);                fclose($fp);                if ($test == "<?xml") {                    $info = &PEAR_PackageFile::fromPackageFile($info, $state);                } else {                    $info = &PEAR_PackageFile::fromTgzFile($info, $state);                }            }        } else {            $info = PEAR::raiseError("Cannot open '$info' for parsing");            return $info;        }        return $info;    }}?>

⌨️ 快捷键说明

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