getValue( $theName ) //to return value by name, returns NULL if doesn't exist // ->setValue( $theName, $theValue ) //sets a value by name // ->unsetValue( $theName ) //delete a value by name, can fail if doesn't exist class settings { public $settingsArray; private $base; private $cacheLocation; private $reCacheNeeded = FALSE; public function settings( &$base ) { $this->base = &$base; $this->cacheLocation = getcwd()."/cache/settings.cache"; $this->load(); } public function getValue( $theName ) { return $this->settingsArray[ $theName ]; } public function setValue( $theName, $theValue ) { $theSerializeValue = serialize( $theValue ); //try update first, if fail insert. if ( ! $this->base->query( "UPDATE ".$this->base->prefix."settings_test SET value = '".$theSerializeValue."' WHERE name = '".$theName."'" ) ) { $this->base->query( "INSERT INTO ".$this->base->prefix."settings_test (name, value) VALUES ( '".$theName."', '".$theSerializeValue."' )" ); } $this->settingsArray[$theName] = $theValue; $this->reCacheNeeded = TRUE; } public function unsetValue( $theName ) { $this->base->query( "DELETE FROM ".$this->base->prefix."settings_test WHERE name='".$theName."'" ) ; unset( $this->settingsArray[$theName] ); $this->reCacheNeeded = TRUE; } private function load() { if ( $this->isCached() ) { $this->loadCache(); } else { $this->createCache(); } } private function isCached() { return file_exists( $this->cacheLocation ); } //loads itself and cache file w/ settings private function createCache() { $theFileHandle = fopen( $this->cacheLocation , "w" ); if ( $theFileHandle && flock( $theFileHandle, LOCK_EX ) ) //if i can get a handle and a lock on file { $get_settings = $this->base->query( "SELECT name,value FROM ".$this->base->prefix."settings_test" ); $this->settingsArray = array(); while ( $theRow = $get_settings->fetch() ) { $this->settingsArray[ $theRow['name'] ] = unserialize( $theRow['value'] ); } $theData = serialize( $this->settingsArray ); fwrite( $theFileHandle, $theData ); flock ($theFileHandle, LOCK_UN); fclose( $theFileHandle ); } } private function clearCache() { unlink ( $this->cacheLocation ); } private function loadCache() { $theFileHandle = fopen( $this->cacheLocation , "r" ); if ( $theFileHandle && filesize( $this->cacheLocation ) > 0 ) { $theData = fread( $theFileHandle, filesize( $this->cacheLocation ) ); $this->settingsArray = unserialize ( $theData ); fclose( $theFileHandle ); } else { $this->settingsArray = array(); // we need to set it to a empty array if we fail to load the cache } } function __destruct() { if ( $this->reCacheNeeded ) { $this->clearCache(); } } } ?>