123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- /**
- * Phergie
- *
- * PHP version 5
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.
- * It is also available through the world-wide-web at this URL:
- * http://phergie.org/license
- *
- * @category Phergie
- * @package Phergie
- * @author Phergie Development Team <team@phergie.org>
- * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
- * @license http://phergie.org/license New BSD License
- * @link http://pear.phergie.org/package/Phergie
- */
- /**
- * Reads from and writes to PHP configuration files and provides access to
- * the settings they contain.
- *
- * @category Phergie
- * @package Phergie
- * @author Phergie Development Team <team@phergie.org>
- * @license http://phergie.org/license New BSD License
- * @link http://pear.phergie.org/package/Phergie
- */
- class Phergie_Config implements ArrayAccess
- {
- /**
- * Mapping of configuration file paths to an array of names of settings
- * they contain
- *
- * @var array
- */
- protected $files = array();
- /**
- * Mapping of setting names to their current corresponding values
- *
- * @var array
- */
- protected $settings = array();
- /**
- * Includes a specified PHP configuration file and incorporates its
- * return value (which should be an associative array) into the current
- * configuration settings.
- *
- * @param string $file Path to the file to read
- *
- * @return Phergie_Config Provides a fluent interface
- * @throws Phergie_Config_Exception
- */
- public function read($file)
- {
- if (!(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'
- && file_exists($file))
- && !is_executable($file)
- ) {
- throw new Phergie_Config_Exception(
- 'Path "' . $file . '" does not reference an executable file',
- Phergie_Config_Exception::ERR_FILE_NOT_EXECUTABLE
- );
- }
- $settings = include $file;
- if (!is_array($settings)) {
- throw new Phergie_Config_Exception(
- 'File "' . $file . '" does not return an array',
- Phergie_Config_Exception::ERR_ARRAY_NOT_RETURNED
- );
- }
- $this->files[$file] = array_keys($settings);
- $this->settings += $settings;
- return $this;
- }
- /**
- * Merges an associative array of configuration setting values into the
- * current configuration settings.
- *
- * @param array $settings Associative array of configuration setting
- * values keyed by setting name
- *
- * @return Phergie_Config Provides a fluent interface
- */
- public function readArray(array $settings)
- {
- $this->settings += $settings;
- return $this;
- }
- /**
- * Writes the values of the current configuration settings back to their
- * originating files.
- *
- * @return Phergie_Config Provides a fluent interface
- */
- public function write()
- {
- foreach ($this->files as $file => &$settings) {
- $values = array();
- foreach ($settings as $setting) {
- $values[$setting] = $this->settings[$setting];
- }
- $source = '<?php' . PHP_EOL . PHP_EOL .
- 'return ' . var_export($value, true) . ';';
- file_put_contents($file, $source);
- }
- }
- /**
- * Checks to see if a configuration setting is assigned a value.
- *
- * @param string $offset Configuration setting name
- *
- * @return bool TRUE if the setting has a value, FALSE otherwise
- * @see ArrayAccess::offsetExists()
- */
- public function offsetExists($offset)
- {
- return isset($this->settings[$offset]);
- }
- /**
- * Returns the value of a configuration setting.
- *
- * @param string $offset Configuration setting name
- *
- * @return mixed Configuration setting value or NULL if it is not
- * assigned a value
- * @see ArrayAccess::offsetGet()
- */
- public function offsetGet($offset)
- {
- if (isset($this->settings[$offset])) {
- $value = &$this->settings[$offset];
- } else {
- $value = null;
- }
- return $value;
- }
- /**
- * Sets the value of a configuration setting.
- *
- * @param string $offset Configuration setting name
- * @param mixed $value New setting value
- *
- * @return void
- * @see ArrayAccess::offsetSet()
- */
- public function offsetSet($offset, $value)
- {
- $this->settings[$offset] = $value;
- }
- /**
- * Removes the value set for a configuration setting.
- *
- * @param string $offset Configuration setting name
- *
- * @return void
- * @see ArrayAccess::offsetUnset()
- */
- public function offsetUnset($offset)
- {
- unset($this->settings[$offset]);
- foreach ($this->files as $file => $settings) {
- $key = array_search($offset, $settings);
- if ($key !== false) {
- unset($this->files[$file][$key]);
- }
- }
- }
- }
|