Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Firebird/InterBase Functions : ibase_blob_get

ibase_blob_get

Get len bytes data from open blob (PHP 4, PHP 5)
string ibase_blob_get ( resource blob_handle, int len )

Example 679. ibase_blob_get() example

<?php
$result    
= ibase_query("SELECT blob_value FROM table");
$data      = ibase_fetch_object($result);
$blob_data = ibase_blob_info($data->BLOB_VALUE);
$blob_hndl = ibase_blob_open($data->BLOB_VALUE);
echo        
ibase_blob_get($blob_hndl, $blob_data[0]);
?>

Code Examples / Notes » ibase_blob_get

trinite

The ways mentioned above won't work with segmented blobs. To fix this, I use the following:
(btw, $result->MFOTO is an image in the database)
<?php
$result = ibase_fetch_object($result);

/*
ibase_blob_info array:
[0] bloblength(total)
[1] number of segments
[2] size of largest segment
[3] stream or segmented blob
[4] ??
*/
$blobinfo = ibase_blob_info($result->MFOTO);

$blobhandle = ibase_blob_open($result->MFOTO);
for($i = 0; $i < $blobinfo[1]; $i++){
$readsize = $blobinfo[2];
if($i == ($blobinfo[1] - 1)){
$readsize = $blobinfo[0] - (($blobinfo[1] - 1) * $blobinfo[2]);
}
$totalimage .= ibase_blob_get($blobhandle, $readsize);
}
ibase_blob_close($blobhandle);
echo $totalimage;
?>
This should do the trick ;)


hamacker

The first example is wrong, is missing ibase_blob_close() function.
The correct example is :
<?php
  $sql      = "SELECT blob_value FROM table";
  $result    = ibase_query($sql);
  $data      = ibase_fetch_object($result);
  $blob_data = ibase_blob_info($data->BLOB_VALUE);
  $blob_hndl = ibase_blob_open($data->BLOB_VALUE);
  print        ibase_blob_get($blob_hndl, $blob_data[0]);
  // without close blob conection, php and ibase_blob_get() do not run.
 ibase_blob_close($blob_hndl);  
?>


sol

I found examples like these:
$sql = "SELECT ID, CONTENTTYPE, BLOBSIZE, DATA,NAME ";
$sql.= " FROM OM_BLOB WHERE ID = 42";
$result = ibase_query($sql);
while ($row=ibase_fetch_object($result))
{
   $blob_data = ibase_blob_info( $row->DATA);
   $blob_hndl = ibase_blob_open($row->DATA);
   $image = ibase_blob_get( $blob_hndl, $blob_data[0]);
}
but this won't work for large blobs.
One solution for big blobs is to retrieve them by chunks:
$sql = "SELECT ID, CONTENTTYPE, BLOBSIZE, DATA,NAME ";
$sql.= " FROM OM_BLOB WHERE ID = 42";
$result = ibase_query($sql);
while ($row=ibase_fetch_object($result))
{
   $image = ibase_blob_get($blob_hndl,8192);
   while($data = ibase_blob_get($blob_hndl, 8192)){
       $image .= $data;
   }
}


Change Language


Follow Navioo On Twitter
ibase_add_user
ibase_affected_rows
ibase_backup
ibase_blob_add
ibase_blob_cancel
ibase_blob_close
ibase_blob_create
ibase_blob_echo
ibase_blob_get
ibase_blob_import
ibase_blob_info
ibase_blob_open
ibase_close
ibase_commit_ret
ibase_commit
ibase_connect
ibase_db_info
ibase_delete_user
ibase_drop_db
ibase_errcode
ibase_errmsg
ibase_execute
ibase_fetch_assoc
ibase_fetch_object
ibase_fetch_row
ibase_field_info
ibase_free_event_handler
ibase_free_query
ibase_free_result
ibase_gen_id
ibase_maintain_db
ibase_modify_user
ibase_name_result
ibase_num_fields
ibase_num_params
ibase_param_info
ibase_pconnect
ibase_prepare
ibase_query
ibase_restore
ibase_rollback_ret
ibase_rollback
ibase_server_info
ibase_service_attach
ibase_service_detach
ibase_set_event_handler
ibase_timefmt
ibase_trans
ibase_wait_event
eXTReMe Tracker