How to send bytea data straight to browser (as in pg_loreadall)?

From: Frank Joerdens <frank(at)joerdens(dot)de>
To: pgsql-php(at)postgresql(dot)org
Cc: adam(at)archi-me-des(dot)de, linuxkurs(at)fas-art(dot)com
Subject: How to send bytea data straight to browser (as in pg_loreadall)?
Date: 2002-04-01 18:31:01
Message-ID: 20020401203101.A13198@superfly.archi-me-des.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-php

I don't seem to be able to get my head 'round as to how to do this. It
works OK if I do something like

---------------------- begin snippet ----------------------
$query = "SELECT * FROM bytea_test;";

$conn = pg_pconnect("host=192.168.100.70 dbname=bytea_test");
$result = pg_exec($conn, $query);

$i = 0;
while (@pg_result($result, $i, id)) {

$fp = fopen('/usr/local/httpd/htdocs/testfile'.$i.'.gif', 'w');
fwrite($fp, stripcslashes(pg_result($result, $i, image)));
echo "<img src=\"";
echo 'testfile'.$i.'.gif';
echo "\">";
$i++;

}
---------------------- end snippet ----------------------

which means that I create a file for each image pulled from the database
and then put this file path (relative to http root) into an img tag.

That's rather stupid though, because it's unnecessary, slow, and bound
to give concurrency trouble.

I've played with fgets, fwrite, fputs, fpassthrough, trying to make a
file pointer on stdout with fopen . . . it appears that I don't
understand some crucial point about how this works. How do you present
an image to the browser without actually creating a file for it? The
built in function pg_loreadall appears to do exactly that. I'd need to
replicate that functionality for bytea.

Regards, Frank

Responses

Browse pgsql-php by date

  From Date Subject
Next Message Frank Joerdens 2002-04-01 19:09:37 Re: How to send bytea data straight to browser (as in pg_loreadall)?
Previous Message Tomaz Borstnar 2002-03-30 00:22:58 Many "pq_flush: send() failed: Broken pipe" after upgrading from php 4.0.x to php 4.1.x