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;
}
}
?>