PHPKonf: Istanbul PHP Conference 2017


(PHP 4 >= 4.2.0, PHP 5, PHP 7)

pg_lo_read_all Lit un objet de grande taille en totalité


int pg_lo_read_all ( resource $large_object )

pg_lo_read_all() lit un objet de grande taille en totalité et le passe directement au client, après les en-têtes adéquates. Cette fonction est prévue pour transmettre des sons ou des images.

Pour utiliser un objet de grande taille (lo), il est nécessaire de le faire dans une transaction.


Auparavant, cette fonction s'appelait pg_loreadall().

Liste de paramètres


Ressource objet de grande taille (LOB) PostgreSQL retournée par pg_lo_open().

Valeurs de retour

Nombre d'octets lu ou FALSE en cas d'erreur.


Exemple #1 Exemple avec pg_lo_read_all()

('Content-type: image/jpeg');
$image_oid 189762345;
$database pg_connect("dbname=jacarta");
$handle pg_lo_open($database$image_oid"r");

Voir aussi

add a note add a note

User Contributed Notes 2 notes

robert dot bernier5 at sympatico dot ca
12 years ago
// 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=""');

pg_lo_read_all($handle_lo) or
  die("<h1>Error, can't read large object.</h1>");

// committing the data transaction
pg_query ($dbconn, "commit");
fabar2 at libero dot it
5 years ago
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.
To Top