$mValue); } $sContent = file_get_contents(self::$sFileConfig); foreach($aValues as $sName=>$mValue) { $sContent=self::_writeValue($sName,$mValue,$sContent); } file_put_contents(self::$sFileConfig,$sContent); return true; } static public function get($sName,$mDefault=null) { if (!self::checkFile(false)) { return $mDefault; } $aConfig=include(self::$sFileConfig); if (strpos($sName, '.')) { $sVal = $aConfig; $aKeys = explode('.', $sName); foreach ($aKeys as $k) { if (isset($sVal[$k])) { $sVal = $sVal[$k]; } else { return $mDefault; } } } else { if (isset($aConfig[$sName])) { $sVal=$aConfig[$sName]; } else { return $mDefault; } } return $sVal; } static public function _writeValue($sName,$mValue,$sContent) { $sName='$config[\''.implode('\'][\'', explode('.',$sName)).'\']'; $mValue=self::_convertToConfigValue($mValue); /** * Если переменная уже определена в конфиге, * то меняем значение. */ if(substr_count($sContent, $sName)) { $sContent=preg_replace("~".preg_quote($sName).".+;~Ui", $sName.' = '.$mValue.';', $sContent); } else { $sContent=str_replace('return $config;', $sName.' = '.$mValue.';'.PHP_EOL.'return $config;', $sContent); } return $sContent; } static public function _convertToConfigValue($mValue) { switch(true) { case is_string($mValue): return "'".addslashes($mValue)."'"; case is_bool($mValue): return ($mValue)?"true":"false"; case is_array($mValue): $sArrayString=""; foreach($mValue as $sKey=>$sValue) { $sArrayString .= "'{$sKey}'=>".self::_convertToConfigValue($sValue).","; } return "array(".$sArrayString.")"; case is_numeric($mValue): return $mValue; default: return "'".(string)$mValue."'"; } } static public function checkFile($bCheckWritable=true) { if (is_null(self::$sFileConfig) or !file_exists(self::$sFileConfig)) { self::$sLastError=InstallCore::getLang('config.errors.file_not_found'); return false; } if ($bCheckWritable) { if (!is_writable(self::$sFileConfig)) { self::$sLastError=InstallCore::getLang('config.errors.file_not_writable'); return false; } } return true; } }