phparray.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 253 行
PHP
253 行
<?php// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.0 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Bertrand Mansion <bmansion@mamasam.com> |// +----------------------------------------------------------------------+//// $Id: PHPArray.php,v 1.23 2005/02/10 06:02:40 ryansking Exp $/*** Config parser for common PHP configuration array* such as found in the horde project.** Options expected is:* 'name' => 'conf'* Name of the configuration array.* Default is $conf[].* 'useAttr' => true* Whether we render attributes** @author Bertrand Mansion <bmansion@mamasam.com>* @package Config*/class Config_Container_PHPArray { /** * This class options: * - name of the config array to parse/output * Ex: $options['name'] = 'myconf'; * - Whether to add attributes to the array * Ex: $options['useAttr'] = false; * * @var array */ var $options = array('name' => 'conf', 'useAttr' => true); /** * Constructor * * @access public * @param string $options Options to be used by renderer */ function Config_Container_PHPArray($options = array()) { foreach ($options as $key => $value) { $this->options[$key] = $value; } } // end constructor /** * Parses the data of the given configuration file * * @access public * @param string $datasrc path to the configuration file * @param object $obj reference to a config object * @return mixed returns a PEAR_ERROR, if error occurs or true if ok */ function &parseDatasrc($datasrc, &$obj) { if (empty($datasrc)) { return PEAR::raiseError("Datasource file path is empty.", null, PEAR_ERROR_RETURN); } if (is_array($datasrc)) { $this->_parseArray($datasrc, $obj->container); } else { if (!file_exists($datasrc)) { return PEAR::raiseError("Datasource file does not exist.", null, PEAR_ERROR_RETURN); } else { include($datasrc); if (!isset(${$this->options['name']}) || !is_array(${$this->options['name']})) { return PEAR::raiseError("File '$datasrc' does not contain a required '".$this->options['name']."' array.", null, PEAR_ERROR_RETURN); } } $this->_parseArray(${$this->options['name']}, $obj->container); } return true; } // end func parseDatasrc /** * Parses the PHP array recursively * @param array $array array values from the config file * @param object $container reference to the container object * @access private * @return void */ function _parseArray($array, &$container) { foreach ($array as $key => $value) { switch ((string)$key) { case '@': $container->setAttributes($value); break; case '#': $container->setType('directive'); $container->setContent($value); break; default:/* if (is_array($value)) { $section =& $container->createSection($key); $this->_parseArray($value, $section); } else { $container->createDirective($key, $value); }*/ if (is_array($value)) { if (is_integer(key($value))) { foreach ($value as $nestedValue) { $section =& $container->createSection($key); $this->_parseArray($nestedValue, $section); } } else { $section =& $container->createSection($key); $this->_parseArray($value, $section); } } else { $container->createDirective($key, $value); } } } } // end func _parseArray /** * Returns a formatted string of the object * @param object $obj Container object to be output as string * @access public * @return string */ function toString(&$obj) { if (!isset($string)) { $string = ''; } switch ($obj->type) { case 'blank': $string .= "\n"; break; case 'comment': $string .= '// '.$obj->content."\n"; break; case 'directive': $attrString = ''; $parentString = $this->_getParentString($obj); $attributes = $obj->getAttributes(); if ($this->options['useAttr'] && is_array($attributes) && count($attributes) > 0) { // Directive with attributes '@' and value '#' $string .= $parentString."['#']"; foreach ($attributes as $attr => $val) { $attrString .= $parentString."['@']" ."['".$attr."'] = '".addslashes($val)."';\n"; } } else { $string .= $parentString; } $string .= ' = '; if (is_string($obj->content)) { $string .= "'".addslashes($obj->content)."'"; } elseif (is_int($obj->content) || is_float($obj->content)) { $string .= $obj->content; } elseif (is_bool($obj->content)) { $string .= ($obj->content) ? 'true' : 'false'; } $string .= ";\n"; $string .= $attrString; break; case 'section': $attrString = ''; $attributes = $obj->getAttributes(); if ($this->options['useAttr'] && is_array($attributes) && count($attributes) > 0) { $parentString = $this->_getParentString($obj); foreach ($attributes as $attr => $val) { $attrString .= $parentString."['@']" ."['".$attr."'] = '".addslashes($val)."';\n"; } } $string .= $attrString; if ($count = count($obj->children)) { for ($i = 0; $i < $count; $i++) { $string .= $this->toString($obj->getChild($i)); } } break; default: $string = ''; } return $string; } // end func toString /** * Returns a formatted string of the object parents * @access private * @return string */ function _getParentString(&$obj) { $string = ''; if (!$obj->isRoot()) { if (!$obj->parent->isRoot()) { $string = is_int($obj->name) ? "[".$obj->name."]" : "['".$obj->name."']"; } else { if (empty($this->options['name'])) { $string .= '$'.$obj->name; } else { $string .= '$'.$this->options['name']."['".$obj->name."']"; } } $string = $this->_getParentString($obj->parent).$string; $count = $obj->parent->countChildren(null, $obj->name); if ($count > 1) { $string .= '['.$obj->getItemPosition().']'; } } return $string; } // end func _getParentString /** * Writes the configuration to a file * * @param mixed datasrc info on datasource such as path to the configuraton file * @param string configType (optional)type of configuration * @access public * @return string */ function writeDatasrc($datasrc, &$obj) { $fp = @fopen($datasrc, 'w'); if ($fp) { $string = "<?php\n". $this->toString($obj) ."?>"; // <? : Fix my syntax coloring $len = strlen($string); @flock($fp, LOCK_EX); @fwrite($fp, $string, $len); @flock($fp, LOCK_UN); @fclose($fp); return true; } else { return PEAR::raiseError('Cannot open datasource for writing.', 1, PEAR_ERROR_RETURN); } } // end func writeDatasrc} // end class Config_Container_PHPArray?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?