xmldbfile.class.php

来自「很棒的在线教学系统」· PHP 代码 · 共 202 行

PHP
202
字号
<?php // $Id: XMLDBFile.class.php,v 1.6.2.1 2008/09/29 17:09:42 stronk7 Exp $/////////////////////////////////////////////////////////////////////////////                                                                       //// NOTICE OF COPYRIGHT                                                   ////                                                                       //// Moodle - Modular Object-Oriented Dynamic Learning Environment         ////          http://moodle.com                                            ////                                                                       //// Copyright (C) 1999 onwards Martin Dougiamas        http://dougiamas.com  ////           (C) 2001-3001 Eloy Lafuente (stronk7) http://contiento.com  ////                                                                       //// This program is free software; you can redistribute it and/or modify  //// it under the terms of the GNU General Public License as published by  //// the Free Software Foundation; either version 2 of the License, or     //// (at your option) any later version.                                   ////                                                                       //// This program is distributed in the hope that it will be useful,       //// but WITHOUT ANY WARRANTY; without even the implied warranty of        //// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //// GNU General Public License for more details:                          ////                                                                       ////          http://www.gnu.org/copyleft/gpl.html                         ////                                                                       //////////////////////////////////////////////////////////////////////////////// This class represents an entire XMLDB fileclass XMLDBFile extends XMLDBObject {    var $path;    var $schema;    var $dtd;    var $xmldb_structure;    /**     * Constructor of the XMLDBFile     */    function XMLDBFile ($path) {        parent::XMLDBObject($path);        $this->path = $path;        $this->xmldb_structure = NULL;    }    /**     * Determine if the XML file exists     */    function fileExists() {        if (file_exists($this->path) && is_readable($this->path)) {            return true;        }        return false;    }    /**     * Determine if the XML is writeable     */    function fileWriteable() {        if (is_writeable(dirname($this->path))) {            return true;        }        return false;    }    function &getStructure() {        return $this->xmldb_structure;    }    /**     * This function will check/validate the XML file for correctness      * Dinamically if will use the best available checker/validator     * (expat syntax checker or DOM schema validator     */    function validateXMLStructure() {    /// Going to perform complete DOM schema validation        if (extension_loaded('dom') && method_exists(new DOMDocument(), 'load')) {        /// Let's capture errors            if (function_exists('libxml_use_internal_errors')) {                libxml_use_internal_errors(true); // This function is PHP5 only (MDL-8730)            }        /// Create and load XML file            $parser = new DOMDocument();            $parser->load($this->path);        /// Only validate if we have a schema            if (!empty($this->schema) && file_exists($this->schema)) {                $parser->schemaValidate($this->schema);            }        /// Check for errors            $errors = false;            if (function_exists('libxml_get_errors')) {                $errors = libxml_get_errors();            }        /// Prepare errors            if (!empty($errors)) {            /// Create one structure to store errors                $structure = new XMLDBStructure($this->path);            /// Add errors to structure                $structure->errormsg = 'XML Error: ';                foreach ($errors as $error) {                    $structure->errormsg .= sprintf("%s at line %d. ",                                                     trim($error->message, "\n\r\t ."),                                                     $error->line);                }            /// Add structure to file                $this->xmldb_structure = $structure;            /// Check has failed                return false;            }        }    /// Going to perform expat simple check (no validation)        else if (function_exists('xml_parser_create')) {            $parser = xml_parser_create();            if (!xml_parse($parser, file_get_contents($this->path))) {            /// Create one structure to store errors                $structure = new XMLDBStructure($this->path);            /// Add error to structure                $structure->errormsg = sprintf("XML Error: %s at line %d",                          xml_error_string(xml_get_error_code($parser)),                         xml_get_current_line_number($parser));            /// Add structure to file                $this->xmldb_structure = $structure;            /// Check has failed                return false;            }        /// Free parser resources            xml_parser_free($parser);        }    /// Arriving here, something is really wrong because nor dom not expat are present        else {            return false;        }        return true;    }    /**     * Load and the XMLDB structure from file     */    function loadXMLStructure() {        if ($this->fileExists()) {        /// Let's validate the XML file            if (!$this->validateXMLStructure()) {                return false;            }        /// File exists, so let's process it        /// Load everything to a big array            $xmlarr = xmlize(file_get_contents($this->path));        /// Convert array to xmldb structure            $this->xmldb_structure = $this->arr2XMLDBStructure($xmlarr);        /// Analize results            if ($this->xmldb_structure->isLoaded()) {                $this->loaded = true;                return true;            } else {                return false;            }        }        return true;    }    /**     * This function takes an xmlized array and put it into one XMLDBStructure     */    function arr2XMLDBStructure ($xmlarr) {        $structure = new XMLDBStructure($this->path);        $structure->arr2XMLDBStructure($xmlarr);        return $structure;    }    /**     * This function sets the DTD of the XML file     */    function setDTD($path) {        $this->dtd = $path;    }    /**     * This function sets the schema of the XML file     */    function setSchema($path) {        $this->schema = $path;    }    /**     * This function saves the whole XMLDBStructure to its file     */    function saveXMLFile() {        $result = true;        $structure =& $this->getStructure();        $result = file_put_contents($this->path, $structure->xmlOutput());        return $result;    }}?>

⌨️ 快捷键说明

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