file_location = $directory . '/' . $filename . '.' . $suffix; $this->namespace = $filename . '.' . $suffix; } public function __destruct() { $tmp = fopen($this->file_location . '_tmp', 'w'); foreach ($this->header as $header_line) { fwrite($tmp, $header_line . "\n"); } foreach ($this->ids() as $id) { foreach (explode("\n", $this->getString($id)) as $line) { if ($line) { fwrite($tmp, $this->indent . $line . "\n"); } } } foreach ($this->footer as $footer_line) { fwrite($tmp, $footer_line . "\n"); } fclose($tmp); if (file_exists($this->file_location)) { unlink($this->file_location); } rename($this->file_location . '_tmp', $this->file_location); } public function ids() { $ids = array(); $query = db_query("SELECT id FROM freezer WHERE namespace = '%s'", $this->namespace); while ($row = db_fetch_assoc($query)) { $ids[] = $row['id']; } return $ids; } protected function getString($id) { $query = db_query("SELECT value FROM freezer WHERE namespace = '%s' AND id = '%s' AND BINARY id = '%s'", $this->namespace, $id, $id); if ($result = db_fetch_assoc($query)) { return $result['value']; } } public function set($id, $value) { if (!$id) { debug_print_backtrace(); die("Called set without an ID\n"); } $content = mysql_escape_string($this->toString($value, $id)); $query = db_query("SELECT 1 FROM freezer WHERE namespace = '%s' AND id = '%s' AND BINARY id = '%s'", $this->namespace, $id, $id); if (db_fetch_assoc($query)) { db_query("UPDATE freezer SET value = '%s' WHERE namespace = '%s' AND id = '%s' AND BINARY id = '%s'", $content, $this->namespace, $id, $id); } else { db_query("INSERT INTO freezer (namespace, id, value) VALUES ('%s', '%s', '%s')", $this->namespace, $id, $content); } } }