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

📄 v1.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 4 页
字号:
<?php/** * package.xml generation class, package.xml version 1.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> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    CVS: $Id: v1.php,v 1.1.2.1 2005/11/02 16:57:27 cellog Exp $ * @link       http://pear.php.net/package/PEAR * @since      File available since Release 1.4.0a1 *//** * needed for PEAR_VALIDATE_* constants */require_once 'PEAR/Validate.php';require_once 'System.php';require_once 'PEAR/PackageFile/v2.php';/** * This class converts a PEAR_PackageFile_v1 object into any output format. * * Supported output formats include array, XML string, and a PEAR_PackageFile_v2 * object, for converting package.xml 1.0 into package.xml 2.0 with no sweat. * @category   pear * @package    PEAR * @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: @PEAR-VER@ * @link       http://pear.php.net/package/PEAR * @since      Class available since Release 1.4.0a1 */class PEAR_PackageFile_Generator_v1{    /**     * @var PEAR_PackageFile_v1     */    var $_packagefile;    function PEAR_PackageFile_Generator_v1(&$packagefile)    {        $this->_packagefile = &$packagefile;    }    function getPackagerVersion()    {        return '@PEAR-VER@';    }    /**     * @param PEAR_Packager     * @param bool if true, a .tgz is written, otherwise a .tar is written     * @param string|null directory in which to save the .tgz     * @return string|PEAR_Error location of package or error object     */    function toTgz(&$packager, $compress = true, $where = null)    {        require_once 'Archive/Tar.php';        if ($where === null) {            if (!($where = System::mktemp(array('-d')))) {                return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: mktemp failed');            }        } elseif (!@System::mkDir(array('-p', $where))) {            return PEAR::raiseError('PEAR_Packagefile_v1::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_v1::toTgz: unable to save package.xml as' .                ' "' . $where . DIRECTORY_SEPARATOR . 'package.xml"');        }        if (!$this->_packagefile->validate(PEAR_VALIDATE_PACKAGING)) {            return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: invalid package file');        }        $pkginfo = $this->_packagefile->getArray();        $ext = $compress ? '.tgz' : '.tar';        $pkgver = $pkginfo['package'] . '-' . $pkginfo['version'];        $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_v1::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_v1::toTgz: package file object must ' .                'be created from a real file');        }        // {{{ Create the package file list        $filelist = array();        $i = 0;        foreach ($this->_packagefile->getFilelist() as $fname => $atts) {            $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;            if (!file_exists($file)) {                return PEAR::raiseError("File does not exist: $fname");            } else {                $filelist[$i++] = $file;                if (!isset($atts['md5sum'])) {                    $this->_packagefile->setFileAttribute($fname, 'md5sum', md5_file($file));                }                $packager->log(2, "Adding file $fname");            }        }        // }}}        $packagexml = $this->toPackageFile($where, PEAR_VALIDATE_PACKAGING, 'package.xml', true);        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 $ok;            } elseif (!$ok) {                return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: tarball creation failed');            }            // ----- Add the content of the package            if (!$tar->addModify($filelist, $pkgver, $pkgdir)) {                return PEAR::raiseError('PEAR_Packagefile_v1::toTgz: tarball creation failed');            }            return $dest_package;        }    }    /**     * @param string|null directory to place the package.xml in, or null for a temporary dir     * @param int one of the PEAR_VALIDATE_* constants     * @param string name of the generated file     * @param bool if true, then no analysis will be performed on role="php" files     * @return string|PEAR_Error path to the created file on success     */    function toPackageFile($where = null, $state = PEAR_VALIDATE_NORMAL, $name = 'package.xml',                           $nofilechecking = false)    {        if (!$this->_packagefile->validate($state, $nofilechecking)) {            return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: invalid package.xml',                null, null, null, $this->_packagefile->getValidationWarnings());        }        if ($where === null) {            if (!($where = System::mktemp(array('-d')))) {                return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: mktemp failed');            }        } elseif (!@System::mkDir(array('-p', $where))) {            return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: "' . $where . '" could' .                ' not be created');        }        $newpkgfile = $where . DIRECTORY_SEPARATOR . $name;        $np = @fopen($newpkgfile, 'wb');        if (!$np) {            return PEAR::raiseError('PEAR_Packagefile_v1::toPackageFile: unable to save ' .               "$name as $newpkgfile");        }        fwrite($np, $this->toXml($state, true));        fclose($np);        return $newpkgfile;    }    /**     * fix both XML encoding to be UTF8, and replace standard XML entities < > " & '     *     * @param string $string     * @return string     * @access private     */    function _fixXmlEncoding($string)    {        if (version_compare(phpversion(), '5.0.0', 'lt')) {            $string = utf8_encode($string);        }        return strtr($string, array(                                          '&'  => '&amp;',                                          '>'  => '&gt;',                                          '<'  => '&lt;',                                          '"'  => '&quot;',                                          '\'' => '&apos;' ));    }    /**     * 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, $nofilevalidation = false)    {        $this->_packagefile->setDate(date('Y-m-d'));        if (!$this->_packagefile->validate($state, $nofilevalidation)) {            return false;        }        $pkginfo = $this->_packagefile->getArray();        static $maint_map = array(            "handle" => "user",            "name" => "name",            "email" => "email",            "role" => "role",            );        $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";        $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";        $ret .= "<package version=\"1.0\" packagerversion=\"@PEAR-VER@\">\n" ." <name>$pkginfo[package]</name>";        if (isset($pkginfo['extends'])) {            $ret .= "\n<extends>$pkginfo[extends]</extends>";        }        $ret .= "\n <summary>".$this->_fixXmlEncoding($pkginfo['summary'])."</summary>\n" ." <description>".trim($this->_fixXmlEncoding($pkginfo['description']))."\n </description>\n" ." <maintainers>\n";        foreach ($pkginfo['maintainers'] as $maint) {            $ret .= "  <maintainer>\n";            foreach ($maint_map as $idx => $elm) {                $ret .= "   <$elm>";                $ret .= $this->_fixXmlEncoding($maint[$idx]);                $ret .= "</$elm>\n";            }            $ret .= "  </maintainer>\n";        }        $ret .= "  </maintainers>\n";        $ret .= $this->_makeReleaseXml($pkginfo, false, $state);        if (isset($pkginfo['changelog']) && count($pkginfo['changelog']) > 0) {            $ret .= " <changelog>\n";            foreach ($pkginfo['changelog'] as $oldrelease) {                $ret .= $this->_makeReleaseXml($oldrelease, true);            }            $ret .= " </changelog>\n";        }        $ret .= "</package>\n";        return $ret;    }    // }}}    // {{{ _makeReleaseXml()    /**     * Generate part of an XML description with release information.     *     * @param array  $pkginfo    array with release information     * @param bool   $changelog  whether the result will be in a changelog element     *     * @return string XML data     *     * @access private     */    function _makeReleaseXml($pkginfo, $changelog = false, $state = PEAR_VALIDATE_NORMAL)    {        // XXX QUOTE ENTITIES IN PCDATA, OR EMBED IN CDATA BLOCKS!!        $indent = $changelog ? "  " : "";        $ret = "$indent <release>\n";        if (!empty($pkginfo['version'])) {            $ret .= "$indent  <version>$pkginfo[version]</version>\n";        }        if (!empty($pkginfo['release_date'])) {            $ret .= "$indent  <date>$pkginfo[release_date]</date>\n";        }        if (!empty($pkginfo['release_license'])) {            $ret .= "$indent  <license>$pkginfo[release_license]</license>\n";        }        if (!empty($pkginfo['release_state'])) {            $ret .= "$indent  <state>$pkginfo[release_state]</state>\n";        }        if (!empty($pkginfo['release_notes'])) {            $ret .= "$indent  <notes>".trim($this->_fixXmlEncoding($pkginfo['release_notes']))            ."\n$indent  </notes>\n";        }        if (!empty($pkginfo['release_warnings'])) {            $ret .= "$indent  <warnings>".$this->_fixXmlEncoding($pkginfo['release_warnings'])."</warnings>\n";        }        if (isset($pkginfo['release_deps']) && sizeof($pkginfo['release_deps']) > 0) {            $ret .= "$indent  <deps>\n";            foreach ($pkginfo['release_deps'] as $dep) {                $ret .= "$indent   <dep type=\"$dep[type]\" rel=\"$dep[rel]\"";                if (isset($dep['version'])) {                    $ret .= " version=\"$dep[version]\"";                }                if (isset($dep['optional'])) {                    $ret .= " optional=\"$dep[optional]\"";                }                if (isset($dep['name'])) {                    $ret .= ">$dep[name]</dep>\n";                } else {                    $ret .= "/>\n";                }            }            $ret .= "$indent  </deps>\n";        }        if (isset($pkginfo['configure_options'])) {            $ret .= "$indent  <configureoptions>\n";            foreach ($pkginfo['configure_options'] as $c) {                $ret .= "$indent   <configureoption name=\"".                    $this->_fixXmlEncoding($c['name']) . "\"";                if (isset($c['default'])) {                    $ret .= " default=\"" . $this->_fixXmlEncoding($c['default']) . "\"";                }                $ret .= " prompt=\"" . $this->_fixXmlEncoding($c['prompt']) . "\"";                $ret .= "/>\n";            }            $ret .= "$indent  </configureoptions>\n";        }        if (isset($pkginfo['provides'])) {            foreach ($pkginfo['provides'] as $key => $what) {                $ret .= "$indent  <provides type=\"$what[type]\" ";                $ret .= "name=\"$what[name]\" ";                if (isset($what['extends'])) {                    $ret .= "extends=\"$what[extends]\" ";                }                $ret .= "/>\n";            }        }

⌨️ 快捷键说明

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