Pay attention that if you omit the "length" parameter it will read a 8192 bytes object regardless to its real dimensions. If you want to use this function think to save the object size somewhere (usually a field in its table) before reading the object. Alternatively use the pg_lo_readall function.
pg_lo_read_all
(PHP 4 >= 4.2.0, PHP 5)
pg_lo_read_all — Liest ein Large Object vollständig und reicht es direkt an den Browser weiter
Beschreibung
$large_object
)pg_lo_read_all() liest ein Large Object vollständig und übergibt es direkt an den Browser, nachdem alle entsprechenden Header gesendet wurden. Die Funktion wird hauptsächlich für Binärdaten wie Bilder oder Audiodaten genutzt.
Um die Large Object Schnittstelle benutzen zu können, müssen die Kommandos innerhalb einer Transaktion ausgeführt werden.
Hinweis:
Diese Funktion ersetzt die Funktion pg_loreadall()().
Parameter-Liste
-
large_object -
PostgreSQL Large Object Ressource (LOB), die von der Funktion pg_lo_open() zurückgegeben wurde.
Rückgabewerte
Die Anzahl der gelesenen Bytes oder FALSE, falls ein Fehler auftrat.
Beispiele
Beispiel #1 pg_lo_read_all() Beispiel
<?php
header('Content-type: image/jpeg');
$image_oid = 189762345;
$database = pg_connect("dbname=jacarta");
pg_query($database, "begin");
$handle = pg_lo_open($database, $image_oid, "r");
pg_lo_read_all($handle);
pg_query($database, "commit");
?>
// remember, large objects must be obtained from within a transaction
pg_query ($dbconn, "begin");
// "assume" for this example that the large object resource number of the zipped file is "17899"
$lo_oid = 17899;
$handle_lo = pg_lo_open($dbconn,$lo_oid,"r") or die("<h1>Error.. can't get handle</h1>");
//headers to send to the browser before beginning the binary download
header('Accept-Ranges: bytes');
header('Content-Length: 32029974'); //this is the size of the zipped file
header('Keep-Alive: timeout=15, max=100');
header('Content-type: Application/x-zip');
header('Content-Disposition: attachment; filename="superjob.zip"');
pg_lo_read_all($handle_lo) or
die("<h1>Error, can't read large object.</h1>");
// committing the data transaction
pg_query ($dbconn, "commit");
