From: Jason Woofenden Date: Tue, 5 Jun 2007 08:14:40 +0000 (-0400) Subject: fdb works, added fault-tollerent read_wole_file X-Git-Url: https://jasonwoof.com/gitweb/?p=wfpl.git;a=commitdiff_plain;h=7b70792307cbb5ff5b4442c366e1aa0498e34e9c fdb works, added fault-tollerent read_wole_file --- diff --git a/fdb.php b/fdb.php new file mode 100644 index 0000000..4e28972 --- /dev/null +++ b/fdb.php @@ -0,0 +1,128 @@ +> 24) . chr(($int >> 16) & 0xff) . chr(($int >> 8) & 0xff) . chr($int & 0xff); +} + +# return a php number from the string you pass in. The first 4 bytes of the +# string are read in as a binary value in big-endian format. +function from_raw_int($quad) { + return (ord(substr($quad, 0, 1)) << 24) + (ord(substr($quad, 1, 1)) << 16) + (ord(substr($quad, 2, 1)) << 8) + ord(substr($quad, 3, 1)); +} + +function int_at($string, $index) { + return from_raw_int(substr($string, $index * 4, 4)); +} + +# remove the first 4 bytes of the string, and return them as an int +function pop_int($&string) { + $int = from_raw_int(substring($string, 0 4)); + $string = substr($string, 4); + return $int; +} + + + +function fdb_get_raw($key) { + $key = fdb_fix_key($key); + return read_whole_file_or_false(fdb_get_dir() . "/$key"); +} + +function fdb_set_raw($key, $data) { + $key = fdb_fix_key($key); + write_whole_file(fdb_get_dir() . "/$key", $data); +} + +# like fdb_get() except it returns an array even when there's just one element +function fdb_geta($key) { + $key = fdb_fix_key($key); + $data = fd_get_raw($key); + if($data === false) { + return false; + } + $header_count = pop_int($data); + $out = array(); + while($header_count--) { + $size = int_at($data); + $out[] = substr($data, 0, $size); + $data = substr($data, $size); + } + return $out; +} + +# returns: +# +# false if the key is not found in the database +# +# an array from the file otherwise +# +# a string if there's one field in that file (use fdb_geta() if you want an +# array in this case too) +function fdb_get($key) { + $ret = fdb_geta($key); + if(count($ret) == 1) { + return $ret[0]; + } else { + return $ret; + } +} + +# data can be a string or array +function fdb_put($key, $data) { + $key = fdb_fix_key($key); + if(!is_array($data)) { + $data = array($data); + } + $out = to_raw_int(count($data)); + foreach($data as $dat) { + $out .= to_raw_int(strlen($dat)); + $out .= $dat; + } + return $out; +} + +?> diff --git a/file.php b/file.php new file mode 100644 index 0000000..3660397 --- /dev/null +++ b/file.php @@ -0,0 +1,44 @@ + diff --git a/metaform/template.htaccess b/metaform/template.htaccess new file mode 100644 index 0000000..eb2ad6d --- /dev/null +++ b/metaform/template.htaccess @@ -0,0 +1,3 @@ +RewriteEngine on +RewriteRule ^$ /~form~/run.php +RewriteRule ^[^/]*\.html$ /~form~/run.php