FlatBase Error: fb_array_swap, invalid type given (expected array)."); } if (!isset($swap1) || !isset($swap2)) { die("FlatBase Error: fb_swap, no keys given."); } if (!isset($array[$swap1]) || !isset($array[$swap2])) { die("FlatBase Error: fb_swap, keys do not exist."); } $__temp = $array[$swap1]; $array[$swap1] = $array[$swap2]; $array[$swap2] = $__temp; return $array; } function fb_a2s($__array) { if (!isset($__array)) { die("FlatBase Error: No data given in fb_a2s"); } if (!is_array($__array)) { die("FlatBase Error: Wrong data given in fb_a2s, expected array"); } $__return = ""; foreach($__array as $key => $value) { if (is_array($value)) { $__return .= " ".base64_encode($key)."!".base64_encode(fb_a2s($value))."!A"; } elseif (is_int($value)) { $__return .= " ".base64_encode($key)."!".base64_encode($value)."!I"; } elseif (is_float($value)) { $__return .= " ".base64_encode($key)."!".base64_encode($value)."!F"; } elseif (is_string($value)) { $__return .= " ".base64_encode($key)."!".base64_encode($value)."!S"; } elseif (is_null($value)) { $__return .= " ".base64_encode($key)."!!N"; } elseif (is_bool($value)) { if ($value) { $__return .= " ".base64_encode($key)."!T!B"; } else { $__return .= " ".base64_encode($key)."!F!B"; } } else { die("FlatBase Error: Unsupported datatype"); } } return trim($__return); } function fb_s2a($__string) { if (!isset($__string)) { die("FlatBase Error: No data given in fb_s2a"); } if (!is_string($__string)) { die("FlatBase Error: Wrong data given in fb_s2a, expected string"); } $__string = explode(" ", $__string); foreach ($__string as $void => $data) { $data = explode("!", $data); if (isset($data[0]) && isset($data[1])) { $data[1] = base64_decode($data[1]); $data[0] = base64_decode($data[0]); } if ($data[2] == "A") { if (empty($data[1])) { $return[$data[0]] = array(); } else { $return[$data[0]] = fb_s2a($data[1]); } } elseif ($data[2] == "I") { $return[$data[0]] = (int)$data[1]; } elseif ($data[2] == "F") { $return[$data[0]] = (float)$data[1]; } elseif ($data[2] == "S") { $return[$data[0]] = (string)$data[1]; } elseif ($data[2] == "B") { if ($data[1] == "T") { $return[$data[0]] = true; } elseif ($data[1] == "F") { $return[$data[0]] = false; } else { die("FlatBase Error: Flagged as boolean but incorrect value"); } } elseif ($data[2] == "N") { $return[$data[0]] = NULL; } else { die("FlatBase Error: Unsupported type: ".htmlentities($data[2]).""); } } return $return; } function fb_open($__database_name) { $__contents = fb_open_raw($__database_name); return $__contents['data']; } function fb_save($__database_name, $__contents) { fb_save_raw($__database_name, array("data" => $__contents, "changed" => time())); return true; } function fb_name($__value_db) { return sha1($__value_db).md5($__value_db).".secure.fb"; } function fb_open_raw($__value_db) { if (file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { $__handle = fopen(sha1($__value_db).md5($__value_db).".secure.fb", "r"); if (!flock($__handle, LOCK_EX)) { die("FlatBase Error: Unable to get exclusive lock on database ".$__value_db.""); } $__content = file_get_contents(sha1($__value_db).md5($__value_db).".secure.fb"); fclose($__handle); if ($__content == "@NUL") { return array(); } else { $__return = fb_s2a($__content); if (is_array($__return)) { return $__return; } else { die("FlatBase Error: Database ".$__value_db." is corrupt"); } } } else { die("FlatBase Error: Unable to read database ".$__value_db.""); } } function fb_save_raw($__value_db, $__value_content) { if (!is_array($__value_content)) { die("FlatBase Error: Wrong datatype in ".$__value_db.". Expected array."); } $__database_handle = fopen(sha1($__value_db).md5($__value_db).".secure.fb", "w"); if (!$__database_handle) { die("FlatBase Error: Access denied to ".$__value_db.""); } if (!flock($__database_handle, LOCK_EX)) { die("FlatBase Error: Unable to get exclusive lock on database ".$__value_db.""); } $__this_save = fb_a2s($__value_content); if (empty($__this_save)) { $__this_save = "@NUL"; } fwrite($__database_handle, $__this_save); fclose($__database_handle); if (file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { return true; } else { die("FlatBase Error: Unable to change database array ".$__value_db.""); } } function fb_exists($__value_db) { if (file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { return true; } else { return false; } } function fb_drop($__value_db) { if (file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { unlink(sha1($__value_db).md5($__value_db).".secure.fb"); if (!file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { return true; } else { $errors = 0; while(file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { unlink(sha1($__value_db).md5($__value_db).".secure.fb"); if (!file_exists(sha1($__value_db).md5($__value_db).".secure.fb")) { return true; } else { $errors++; sleep(1); if ($errors == 10) { die("FlatBase Error: Unable to drop database ".$__value_db.""); } } } } } else { return false; } } ?>