123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- class INI {
- private $file;
- static private $instances;
- private $data;
- private function __construct($file) {
- $this->file = $file;
- $this->data = parse_ini_file($file, true);
- }
- static public function & getInstance($file) {
- if(! isset(self::$instances[$file])) {
- self::$instances[$file] = new INI($file);
- }
- return self::$instances[$file];
- }
- public function getValue($p_section,$p_key) {
- if ((is_array($this->data)) &&
- (array_key_exists($p_section, $this->data)) &&
- (array_key_exists($p_key, $this->data[$p_section]))) {
- return $this->data[$p_section][$p_key];
- }
- }
- public function getSections() {
- return array_keys($this->data);
- }
-
- public function getKeys($p_section) {
- if(array_key_exists($p_section,$this->data)) {
- return array_keys($this->data[$p_section]);
- }
- }
- public function setValue($sSection, $sKey, $sValue) {
- $sFileHandle = fopen($this->file, "r");
- if (!$sFileHandle) {
- Log::error(__FILE__,__LINE__,"Unable to open ".$this->file.".");
- }
- if (filesize($this->file) > 0) {
- $sFileContents = fread($sFileHandle, filesize($this->file));
- }
- if ($sFileContents === FALSE) {
- Log::error(__FILE__,__LINE__,"Unable to read data from ".$this->file.".");
- }
- $sFileData = preg_split("/\r?\n/", $sFileContents);
- $sectionStart = -1;
- $sectionEnd = -1;
- $returnLine = -1;
- for ($i = 0; $i < count($sFileData); $i++) {
- $x = strpos($sFileData[$i], "[".$sSection."]");
- $y = strpos($sFileData[$i], "[");
- if ($y == 0 && $y !== FALSE && $sectionStart >= 0 && $sectionEnd == -1) {
- $sectionEnd = ($i - 1);
- }
- $z = explode("=", $sFileData[$i]);
- if (count($z) >= 2) {
- if ($z[0] == $sKey && $sectionStart >= 0 && $sectionEnd == -1 && substr($sFileData[$i], 0, 1) != ";") {
- $returnLine = $i;
- }
- }
- if ($x == 0 && $x !== FALSE && $sectionStart == -1) {
- $sectionStart = ($i + 1);
- }
- }
- if ($sectionEnd == -1) {
- $sectionEnd = (count($sFileData)-1);
- }
- $newfile = "";
- if ($returnLine > -1) {
- $sFileData[$returnLine] = $sKey."=".$sValue;
- for ($i = 0; $i < count($sFileData); $i++) {
- $newfile .= $sFileData[$i]."\r\n";
- }
- }
- else {
- if ($sectionStart > -1) {
- for ($i = 0; $i < count($sFileData); $i++) {
- if ($i == $sectionEnd) {
- $newfile .= $sKey."=".$sValue."\r\n";
- }
- $newfile .= $sFileData[$i]."\r\n";
- }
- }
- else {
- for ($i = 0; $i < count($sFileData); $i++) {
- $newfile .= $sFileData[$i]."\r\n";
- }
- $newfile .= "[".$sSection."]\r\n".$sKey."=".$sValue."\r\n";
- }
- }
- fclose($sFileHandle);
- $sFileHandle = fopen($this->file, "w");
- if (!$sFileHandle) {
- Log::error(__FILE__,__LINE__,"Unable to open file ".$this->file." with write access.");
- }
- $sFileWrite = fwrite($sFileHandle, trim($newfile));
- if ($sFileWrite === FALSE) {
- Log::error(__FILE__,__LINE__,"Unable to write data to file ".$this->file.".");
- }
- fclose($sFileHandle);
- $this->data[$sSection][$sKey] = $sValue;
- }
- }
- ?>
|