ibase_blob_get

(PHP 5, PHP 7)

ibase_blob_getPobiera X bajtów danych z otwartego BLOBa

Opis

ibase_blob_get ( resource $uchwyt_do_bloba , int $X ) : string

Ta funkcja zwraca X bajtów danych z BLOBa, który został otwarty do odczytu za pomocą ibase_blob_open().

Informacja:

Nie jest możliwe odczytywanie informacji o BLOBie, który jest otwarty do zapisu za pomocą ibase_blob_create().

Parametry

uchwyt_do_bloba

Uchwyt do BLOBa otwartego za pomocą ibase_blob_open().

X

Rozmiar zwracanych danych.

Zwracane wartości

Zwraca maksymalnie X bajtów z BLOBa, lub FALSE w przypadku niepowodzenia.

Przykłady

Przykład #1 Przykład ibase_blob_get()

<?php
$wynik           
ibase_query("SELECT wartosc_bloba FROM tabela");
$dane            ibase_fetch_object($wynik);
$dane_bloba      ibase_blob_info($dane->WARTOSC_BLOBA);
$uchwyt_do_bloba ibase_blob_open($dane->WARTOSC_BLOBA);
echo               
ibase_blob_get($uchwyt_do_bloba$dane_bloba[0]);
?>
Podczas gdy ten przykład nie robi niczego więcej, co można uzyskać wywołując 'ibase_blob_echo($dane->WARTOSC_BLOBA)', pokazuje natomiast jak możemy pobierać do $zmiennej informacje aby manipulować nimi tak, jak sobie tego życzymy.

Zobacz też:

add a note add a note

User Contributed Notes 3 notes

up
1
hamacker
19 years ago
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); 
?>
up
0
trinite at trinite dot mine dot nu
18 years ago
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 ;)
up
0
sol at nospam dot example dot com
21 years ago
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;
    }
}
To Top