Viewing file: PHPConstants.php (6.6 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?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: Phillip Oertel <me@phillipoertel.com> | // +----------------------------------------------------------------------+ // // $Id: PHPConstants.php,v 1.3 2005/12/24 02:24:30 aashley Exp $
/** * Config parser for PHP constant files * * @author Phillip Oertel <me@phillipoertel.com> * @package Config * @version 0.1 (not submitted) */
require_once 'Config/Container.php';
class Config_Container_PHPConstants extends Config_Container {
/** * This class options * Not used at the moment * * @var array */ var $options = array();
/** * Constructor * * @access public * @param string $options (optional)Options to be used by renderer */ function Config_Container_PHPConstants($options = array()) { $this->options = $options; } // 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) { $return = true;
if (!file_exists($datasrc)) { return PEAR::raiseError("Datasource file does not exist.", null, PEAR_ERROR_RETURN); } $fileContent = file_get_contents($datasrc, true); if (!$fileContent) { return PEAR::raiseError("File '$datasrc' could not be read.", null, PEAR_ERROR_RETURN); } $rows = explode("\n", $fileContent); for ($i=0, $max=count($rows); $i<$max; $i++) { $line = $rows[$i]; //blanks? // sections if (preg_match("/^\/\/\s*$/", $line)) { preg_match("/^\/\/\s*(.+)$/", $rows[$i+1], $matches); $obj->container->createSection(trim($matches[1])); $i += 2; continue; } // comments if (preg_match("/^\/\/\s*(.+)$/", $line, $matches) || preg_match("/^#\s*(.+)$/", $line, $matches)) { $obj->container->createComment(trim($matches[1])); continue; } // directives $regex = "/^\s*define\s*\('([A-Z1-9_]+)',\s*'*(.[^\']*)'*\)/"; preg_match($regex, $line, $matches); if (!empty($matches)) { $obj->container->createDirective(trim($matches[1]), trim($matches[2])); } } return $return; } // end func parseDatasrc
/** * Returns a formatted string of the object * @param object $obj Container object to be output as string * @access public * @return string */ function toString(&$obj) { $string = '';
switch ($obj->type) { case 'blank': $string = "\n"; break; case 'comment': $string = '// '.$obj->content."\n"; break; case 'directive': $content = $obj->content; // don't quote numeric values, true/false and constants if (!is_numeric($content) && !in_array($content, array('false', 'true')) && !preg_match('/^[A-Z_]+$/', $content)) { $content = "'".$content."'"; } $string = 'define(\''.$obj->name.'\', '.$content.');'.chr(10); break; case 'section': if (!$obj->isRoot()) { $string = chr(10); $string .= '//'.chr(10); $string .= '// '.$obj->name.chr(10); $string .= '//'.chr(10); } if (count($obj->children) > 0) { for ($i = 0, $max = count($obj->children); $i < $max; $i++) { $string .= $this->toString($obj->getChild($i)); } } break; default: $string = ''; } return $string; } // end func toString
/** * Writes the configuration to a file * * @param mixed datasrc info on datasource such as path to the file * @param string configType (optional)type of configuration * @access public * @return string */ function writeDatasrc($datasrc, &$obj) { $fp = @fopen($datasrc, 'w'); if ($fp) { $string = "<?php"; $string .= "\n\n"; $string .= '/**' . chr(10); $string .= ' *' . chr(10); $string .= ' * AUTOMATICALLY GENERATED CODE - DO NOT EDIT BY HAND' . chr(10); $string .= ' *' . chr(10); $string .= '**/' . chr(10); $string .= $this->toString($obj); $string .= "\n?>"; // <? : Fix my syntax coloring
$len = strlen($string); @flock($fp, LOCK_EX); @fwrite($fp, $string, $len); @flock($fp, LOCK_UN); @fclose($fp); // need an error check here return true; } else { return PEAR::raiseError('Cannot open datasource for writing.', 1, PEAR_ERROR_RETURN); } } // end func writeDatasrc
} // end class Config_Container_PHPConstants
?>
|