Thread: How to send bytea data straight to browser (as in pg_loreadall)?
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
Frank Joerdens wrote: > 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 I've always approached this a bit differently, but in any case, did you try to use "php://stdout"? If not see: http://www.php.net/manual/en/function.fopen.php I usually create one php file to generate the image output, and a second one which calls the first. E.g. (untested) ---------------------- begin showimgage.php ---------------------- <?PHP $conn = pg_pconnect("host=192.168.100.70 dbname=bytea_test"); $query = "SELECT img FROM bytea_t where id=" . $_GET["imgid"]; $result = pg_exec($conn, $query); $image = stripcslashes(pg_result($result, 0, 0)); // send the image header("content-type: image/gif"); echo $image; ?> ---------------------- showimgage.php ---------------------- The second file would then have a line like: echo "<img src='showimage.php?imgid=1' border=0>"; Hope this helps, Joe