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

📄 v2.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 4 页
字号:
<?php/** * package.xml generation class, package.xml version 2.0 * * 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     Greg Beaver <cellog@php.net> * @author     Stephan Schmidt (original XML_Serializer code) * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    CVS: $Id: v2.php,v 1.1.2.2 2006/01/01 13:47:00 sniper Exp $ * @link       http://pear.php.net/package/PEAR * @since      File available since Release 1.4.0a1 *//** * file/dir manipulation routines */require_once 'System.php';/** * This class converts a PEAR_PackageFile_v2 object into any output format. * * Supported output formats include array, XML string (using S. Schmidt's * XML_Serializer, slightly customized) * @category   pear * @package    PEAR * @author     Greg Beaver <cellog@php.net> * @author     Stephan Schmidt (original XML_Serializer code) * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    Release: @PEAR-VER@ * @link       http://pear.php.net/package/PEAR * @since      Class available since Release 1.4.0a1 */class PEAR_PackageFile_Generator_v2{   /**    * default options for the serialization    * @access private    * @var array $_defaultOptions    */    var $_defaultOptions = array(                         'indent'             => ' ',                    // string used for indentation                         'linebreak'          => "\n",                  // string used for newlines                         'typeHints'          => false,                 // automatically add type hin attributes                         'addDecl'            => true,                 // add an XML declaration                         'defaultTagName'     => 'XML_Serializer_Tag',  // tag used for indexed arrays or invalid names                         'classAsTagName'     => false,                 // use classname for objects in indexed arrays                         'keyAttribute'       => '_originalKey',        // attribute where original key is stored                         'typeAttribute'      => '_type',               // attribute for type (only if typeHints => true)                         'classAttribute'     => '_class',              // attribute for class of objects (only if typeHints => true)                         'scalarAsAttributes' => false,                 // scalar values (strings, ints,..) will be serialized as attribute                         'prependAttributes'  => '',                    // prepend string for attributes                         'indentAttributes'   => false,                 // indent the attributes, if set to '_auto', it will indent attributes so they all start at the same column                         'mode'               => 'simplexml',             // use 'simplexml' to use parent name as tagname if transforming an indexed array                         'addDoctype'         => false,                 // add a doctype declaration                         'doctype'            => null,                  // supply a string or an array with id and uri ({@see XML_Util::getDoctypeDeclaration()}                         'rootName'           => 'package',                  // name of the root tag                         'rootAttributes'     => array(                             'version' => '2.0',                             'xmlns' => 'http://pear.php.net/dtd/package-2.0',                             'xmlns:tasks' => 'http://pear.php.net/dtd/tasks-1.0',                             'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',                             'xsi:schemaLocation' => 'http://pear.php.net/dtd/tasks-1.0http://pear.php.net/dtd/tasks-1.0.xsdhttp://pear.php.net/dtd/package-2.0http://pear.php.net/dtd/package-2.0.xsd',                         ),               // attributes of the root tag                         'attributesArray'    => 'attribs',                  // all values in this key will be treated as attributes                         'contentName'        => '_content',                   // this value will be used directly as content, instead of creating a new tag, may only be used in conjuction with attributesArray                         'beautifyFilelist'   => false,                         'encoding' => 'UTF-8',                        );   /**    * options for the serialization    * @access private    * @var array $options    */    var $options = array();   /**    * current tag depth    * @var integer $_tagDepth    */    var $_tagDepth = 0;   /**    * serilialized representation of the data    * @var string $_serializedData    */    var $_serializedData = null;    /**     * @var PEAR_PackageFile_v2     */    var $_packagefile;    /**     * @param PEAR_PackageFile_v2     */    function PEAR_PackageFile_Generator_v2(&$packagefile)    {        $this->_packagefile = &$packagefile;    }    /**     * @return string     */    function getPackagerVersion()    {        return '@PEAR-VER@';    }    /**     * @param PEAR_Packager     * @param bool generate a .tgz or a .tar     * @param string|null temporary directory to package in     */    function toTgz(&$packager, $compress = true, $where = null)    {        $a = null;        return $this->toTgz2($packager, $a, $compress, $where);    }    /**     * Package up both a package.xml and package2.xml for the same release     * @param PEAR_Packager     * @param PEAR_PackageFile_v1     * @param bool generate a .tgz or a .tar     * @param string|null temporary directory to package in     */    function toTgz2(&$packager, &$pf1, $compress = true, $where = null)    {        require_once 'Archive/Tar.php';        if (!$this->_packagefile->isEquivalent($pf1)) {            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: "' .                basename($pf1->getPackageFile()) .                '" is not equivalent to "' . basename($this->_packagefile->getPackageFile())                . '"');        }        if ($where === null) {            if (!($where = System::mktemp(array('-d')))) {                return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: mktemp failed');            }        } elseif (!@System::mkDir(array('-p', $where))) {            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: "' . $where . '" could' .                ' not be created');        }        if (file_exists($where . DIRECTORY_SEPARATOR . 'package.xml') &&              !is_file($where . DIRECTORY_SEPARATOR . 'package.xml')) {            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: unable to save package.xml as' .                ' "' . $where . DIRECTORY_SEPARATOR . 'package.xml"');        }        if (!$this->_packagefile->validate(PEAR_VALIDATE_PACKAGING)) {            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: invalid package.xml');        }        $ext = $compress ? '.tgz' : '.tar';        $pkgver = $this->_packagefile->getPackage() . '-' . $this->_packagefile->getVersion();        $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;        if (file_exists(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext) &&              !is_file(getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext)) {            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: cannot create tgz file "' .                getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext . '"');        }        if ($pkgfile = $this->_packagefile->getPackageFile()) {            $pkgdir = dirname(realpath($pkgfile));            $pkgfile = basename($pkgfile);        } else {            return PEAR::raiseError('PEAR_Packagefile_v2::toTgz: package file object must ' .                'be created from a real file');        }        // {{{ Create the package file list        $filelist = array();        $i = 0;        $this->_packagefile->flattenFilelist();        $contents = $this->_packagefile->getContents();        if (isset($contents['bundledpackage'])) { // bundles of packages            $contents = $contents['bundledpackage'];            if (!isset($contents[0])) {                $contents = array($contents);            }            $packageDir = $where;            foreach ($contents as $i => $package) {                $fname = $package;                $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;                if (!file_exists($file)) {                    return $packager->raiseError("File does not exist: $fname");                }                $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;                System::mkdir(array('-p', dirname($tfile)));                copy($file, $tfile);                $filelist[$i++] = $tfile;                $packager->log(2, "Adding package $fname");            }        } else { // normal packages            $contents = $contents['dir']['file'];            if (!isset($contents[0])) {                $contents = array($contents);            }                $packageDir = $where;            foreach ($contents as $i => $file) {                $fname = $file['attribs']['name'];                $atts = $file['attribs'];                $orig = $file;                $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;                if (!file_exists($file)) {                    return $packager->raiseError("File does not exist: $fname");                } else {                    $tfile = $packageDir . DIRECTORY_SEPARATOR . $fname;                    unset($orig['attribs']);                    if (count($orig)) { // file with tasks                        // run any package-time tasks                        if (function_exists('file_get_contents')) {                            $contents = file_get_contents($file);                        } else {                            $fp = fopen($file, "r");                            $contents = @fread($fp, filesize($file));                            fclose($fp);                        }                        foreach ($orig as $tag => $raw) {                            $tag = str_replace($this->_packagefile->getTasksNs() . ':', '', $tag);                            $task = "PEAR_Task_$tag";                            $task = &new $task($this->_packagefile->_config,                                $this->_packagefile->_logger,                                PEAR_TASK_PACKAGE);                            $task->init($raw, $atts, null);                            $res = $task->startSession($this->_packagefile, $contents, $tfile);                            if (!$res) {                                continue; // skip this task                            }                            if (PEAR::isError($res)) {                                return $res;                            }                            $contents = $res; // save changes                            System::mkdir(array('-p', dirname($tfile)));                            $wp = fopen($tfile, "wb");                            fwrite($wp, $contents);                            fclose($wp);                        }                    }                    if (!file_exists($tfile)) {                        System::mkdir(array('-p', dirname($tfile)));                        copy($file, $tfile);                    }                    $filelist[$i++] = $tfile;                    $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($tfile), $i - 1);                    $packager->log(2, "Adding file $fname");                }            }        }            // }}}        if ($pf1 !== null) {            $name = 'package2.xml';        } else {            $name = 'package.xml';        }        $packagexml = $this->toPackageFile($where, PEAR_VALIDATE_PACKAGING, $name);        if ($packagexml) {            $tar =& new Archive_Tar($dest_package, $compress);            $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors            // ----- Creates with the package.xml file            $ok = $tar->createModify(array($packagexml), '', $where);            if (PEAR::isError($ok)) {                return $packager->raiseError($ok);            } elseif (!$ok) {                return $packager->raiseError('PEAR_Packagefile_v2::toTgz(): adding ' . $name .                    ' failed');            }            // ----- Add the content of the package            if (!$tar->addModify($filelist, $pkgver, $where)) {                return $packager->raiseError(                    'PEAR_Packagefile_v2::toTgz(): tarball creation failed');            }            // add the package.xml version 1.0            if ($pf1 !== null) {                $pfgen = &$pf1->getDefaultGenerator();                $packagexml1 = $pfgen->toPackageFile($where, PEAR_VALIDATE_PACKAGING,                    'package.xml', true);                if (!$tar->addModify(array($packagexml1), '', $where)) {                    return $packager->raiseError(                        'PEAR_Packagefile_v2::toTgz(): adding package.xml failed');                }            }            return $dest_package;        }    }    function toPackageFile($where = null, $state = PEAR_VALIDATE_NORMAL, $name = 'package.xml')    {        if (!$this->_packagefile->validate($state)) {            return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: invalid package.xml',                null, null, null, $this->_packagefile->getValidationWarnings());        }        if ($where === null) {            if (!($where = System::mktemp(array('-d')))) {                return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: mktemp failed');            }        } elseif (!@System::mkDir(array('-p', $where))) {            return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: "' . $where . '" could' .                ' not be created');        }        $newpkgfile = $where . DIRECTORY_SEPARATOR . $name;        $np = @fopen($newpkgfile, 'wb');        if (!$np) {            return PEAR::raiseError('PEAR_Packagefile_v2::toPackageFile: unable to save ' .               "$name as $newpkgfile");        }        fwrite($np, $this->toXml($state));        fclose($np);        return $newpkgfile;    }    function &toV2()    {        return $this->_packagefile;    }    /**     * Return an XML document based on the package info (as returned     * by the PEAR_Common::infoFrom* methods).     *     * @return string XML data     */    function toXml($state = PEAR_VALIDATE_NORMAL, $options = array())    {        $this->_packagefile->setDate(date('Y-m-d'));        $this->_packagefile->setTime(date('H:i:s'));        if (!$this->_packagefile->validate($state)) {            return false;        }        if (is_array($options)) {            $this->options = array_merge($this->_defaultOptions, $options);        } else {            $this->options = $this->_defaultOptions;        }        $arr = $this->_packagefile->getArray();        if (isset($arr['filelist'])) {            unset($arr['filelist']);        }        if (isset($arr['_lastversion'])) {            unset($arr['_lastversion']);        }        if ($state ^ PEAR_VALIDATE_PACKAGING && !isset($arr['bundle'])) {            $use = $this->_recursiveXmlFilelist($arr['contents']['dir']['file']);            unset($arr['contents']['dir']['file']);            if (isset($use['dir'])) {                $arr['contents']['dir']['dir'] = $use['dir'];            }            if (isset($use['file'])) {                $arr['contents']['dir']['file'] = $use['file'];            }            $this->options['beautifyFilelist'] = true;        }        $arr['attribs']['packagerversion'] = '@PEAR-VER@';        if ($this->serialize($arr, $options)) {            return $this->_serializedData . "\n";        }        return false;    }    function _recursiveXmlFilelist($list)    {        $dirs = array();        if (isset($list['attribs'])) {            $file = $list['attribs']['name'];            unset($list['attribs']['name']);            $attributes = $list['attribs'];            $this->_addDir($dirs, explode('/', dirname($file)), $file, $attributes);        } else {            foreach ($list as $a) {                $file = $a['attribs']['name'];                $attributes = $a['attribs'];                unset($a['attribs']);                $this->_addDir($dirs, explode('/', dirname($file)), $file, $attributes, $a);            }        }        $this->_formatDir($dirs);

⌨️ 快捷键说明

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