1
0
Fork 0
MySQLDumper/library/Msd/Ini.php

193 Zeilen
4.4 KiB
PHP

<?php
/**
* This file is part of MySQLDumper released under the GNU/GPL 2 license
* http://www.mysqldumper.net
*
* @package MySQLDumper
* @subpackage Ini
* @version SVN: $Rev$
* @author $Author$
*/
/**
* Class to handle ini-files
*
* @package MySQLDumper
* @subpackage Ini
*/
class Msd_Ini
{
/**
* Data of loaded INI file.
*
* @var array
*/
private $_iniData = null;
/**
* Filename of current INI file.
*
* @var string
*/
private $_iniFilename = null;
/**
* Class constructor
*
* @param array|string $options Configuration or filename of INI to load
*
* @return void
*/
public function __construct($options = array())
{
if (is_string($options)) {
$options = array(
'filename' => $options,
);
} elseif (!is_array($options)) {
$options = (array) $options;
}
if (isset($options['filename'])) {
$this->_iniFilename = (string) $options['filename'];
}
if ($this->_iniFilename !== null) {
$this->loadFile();
}
}
/**
* Loads an INI file.
*
* @param string $filename Name of file to load
*
* @return void
*/
public function loadFile($filename = null)
{
if ($filename === null) {
$filename = $this->_iniFilename;
}
if (realpath($filename) === false) {
throw new Msd_Exception(
"INI file " . $filename . "doesn't exists."
);
}
$zfConfig = new Zend_Config_Ini(realpath($filename));
$this->_iniData = $zfConfig->toArray();
}
/**
* Save to INI file.
*
* @param string $filename Name of file to save
*
* @return void
*/
public function save($filename = null)
{
if ($filename === null) {
$filename = $this->_iniFilename;
}
if ($filename === null) {
throw new Msd_Exception(
'You must specify a filename to save the INI!'
);
}
$fileHandle = fopen($filename, 'w+');
fwrite($fileHandle, (string) $this);
fclose($fileHandle);
}
/**
* Converts an array into the INI file format.
*
* @param array $array Array to convert.
* @param integer $level Current depthlevel in the array.
*
* @return string
*/
private function _arrayToIniString($array = null, $level = -1)
{
if ($array === null) {
$array = $this->_iniData;
}
$level++;
$resultString = '';
foreach ($array as $key => $value) {
if (is_array($value)) {
$resultString .= ($level == 0) ?
'[' . $key . ']' . "\n" :
$key . '.';
$resultString .= $this->_arrayToIniString($value);
} else {
$newValue = str_replace(
array('\\', '"'),
array('\\\\', '\\"'),
$value
);
$resultString .= $key . ' = "' . (string) $newValue . '"';
}
$resultString .= "\n";
}
return $resultString;
}
/**
* Get a variable from the data.
*
* @param string $key Name of variable
* @param string $section Name of section
*
* @return mixed
*/
public function get($key, $section = null)
{
if ($section === null) {
return $this->_iniData[$key];
} else {
return $this->_iniData[$section][$key];
}
}
/**
* Set a variable
*
* @param string $key Name of variable
* @param mixed $value Value of variable
* @param string $section Section of variable
*
* @return void
*/
public function set($key, $value, $section = null)
{
if ($section === null) {
$this->_iniData[$key] = $value;
} else {
$this->_iniData[$section][$key] = $value;
}
}
/**
* Get the complete INI.
*
* @return array
*/
public function getAll()
{
return $this->_iniData;
}
/**
* Convert this class into a string.
*
* @return string
*/
public function __toString()
{
return $this->_arrayToIniString();
}
}