Subject | RE: [firebird-support] Blob Compression |
---|---|
Author | Nigel Weeks |
Post date | 2006-05-23T23:39:44Z |
> We need to automatically compress and decompress large text blobs asFilters might be a little more involved, but it's easy
> they are written to and read from the database. I believe this can be
> done with a filter but I do not know how to write or impliment it. If
> anyone has some sample code, a link, or knows where there might be a
> good tutorial it would be greatly appreciated.
if you do it at your middle layer, ie, in PHP.
Here's a complete walkthrough example:
====================================
#!/usr/local/bin/php -e
<?php
/* -------- Schema is as follows ----------
create database "localhost:/raid/db/blob.fdb";
SQL> create table tbl_blah (
CON> blob_field BLOB SUB_TYPE TEXT
CON> );
*/
$conn = ibase_connect("localhost:/raid/db/blob.fdb","sysdba","masterkey");
$string = "This isn't a large string of characters to compress";
$gzstring = gzcompress($string);
$insql = "INSERT INTO tbl_blah (blob_field) values (?)";
if(!$inrec = ibase_query($insql,$gzstring)){
echo "The Insert failed for some reason...";
}
// Ok, there's some compressed info in the field - lets pull it out, and
// if it's compressed, automatically uncompress it.
$outsql = "select * from tbl_blah";
$outrec = ibase_query($outsql);
while($outobj = ibase_fetch_object($outrec,IBASE_FETCH_BLOBS)){
echo "This could be compressed. Let's try it\n";
if(!$text = &gzuncompress($outobj->BLOB_FIELD)){
echo "Decompression failed - must be plain text.\nValue is
'".$outobj->BLOB_FIELD."'\n";
} else {
echo "Decompressed: '".$text."'\n";
}
} // End of fetching objects from recordset
?>
====================================
Nige