Re: files, php & pgsql - Mailing list pgsql-php
From | Dave Perkins |
---|---|
Subject | Re: files, php & pgsql |
Date | |
Msg-id | 3.0.6.32.20001018135652.007b0720@shell1.shore.net Whole thread Raw |
In response to | files, php & pgsql (Chris <tomcat@weirdness.com>) |
List | pgsql-php |
Chris, Try enclosing your call to pg_loreadall() in a transaction block as you do for pg_lowrite(). Without pg_exec("begin") . . . pg_exec("commit") and pg_exec("end") PHP reports "0 is not a PostgreSQL large object index" when calling pg_loreadall(). Also, pg_loreadall() is looking for a "file descriptor" and it appears that you are passing it an 'oid'. I was able to get the following test to work on PostgreSQL 6.5 using PHP3. database name: images table name: images ______________________ field | type | -----------+---------+ picnum | serial | image | oid | ---------------------- <? $db=pg_connect("","","","","images"); pg_exec ($db,"begin"); $loid = pg_locreate($db); $lofp = pg_loopen($db, $loid, "rw"); $strWrite = "test"; pg_lowrite($lofp,$strWrite); $sql = "insert into images(picnum,image) values(nextval('images_picnum_seq'),'$loid')"; $res = pg_exec($db,$sql); pg_loclose($lofp); pg_exec($db, "commit"); pg_exec($db, "end"); $res = pg_exec($db,"SELECT * FROM images"); $row = pg_fetch_object($res,0); pg_exec ($db,"begin"); $lofp = pg_loopen($db, $row->image, "rw"); ?> <HTML> <BODY> <? pg_loreadall($lofp); pg_loclose($lofp); pg_exec($db, "commit"); pg_exec($db, "end"); pg_close($db); ?> </BODY> </HTML> Regards, Dave At 08:45 PM 10/18/00 +1000, you wrote: >I've been thinking the same that the list is dead (or my mail was stuffed) >but now I see it's not the case :) > >I do have a problem (!!), and its trying to get files (of any type) to work >with pgsql & php. I'm using pgsql 7.0.2, php4. > >Anyone have any hints? > >Chris. > >Here's the form I use to upload the files.. ><form enctype="multipart/form-data" name="fileinsert" >action="file-insert.php" method="post"> ><input type="hidden" name="max_file_size" value="10000"> ><input type="file" size="35" name="userfile"><BR> ><input type="submit" value="Upload It" name="uploadfile"> > >I upload the files like this.... ><?php >$db=pg_connect("","","","","images"); >$fp=fopen("$userfile","r"); >pg_exec ($db,"begin"); >$loid = pg_locreate($db); >$lofp = pg_loopen($db, $loid, "w"); >while ($nbytes = fread ($fp, BUFSIZE)) >{ >$tmp = pg_lowrite($lofp, $nbytes); >if ($tmp < $nbytes) echo "Error writing the file"; >} >$sql = "insert into images (picnum, image) values >(nextval('images_picnum_seq'), '$loid')"; >pg_exec($db,$sql); >pg_loclose($lofp); >pg_exec($db, "commit"); >fclose($fp); >echo "done"; >pg_close($db); >?> > >I list the files like this.. >$db = pg_connect("","","","","images"); >$sql = "select * from images"; >$result = pg_exec($db, $sql); >if (!$result) {printf ("error"); } >$totalrows = pg_numrows($result); >$row=0; >do >{ >$myrow = pg_fetch_object($result,$row); >$image_oid = $myrow->picnum; >echo "this is my image <img src=\"blob2jpg.php?image=$image_oid\" >border=0><br>"; >$row++; >}while ($row < $totalrows); >echo $pic; >?> > >I (try to) display the files like this.... ><? >$db=pg_connect("","","","","images"); >$sql="select * from images where picnum=$picnum"; >$result=pg_exec($db,$sql); >if (!$result) { printf ("error"); } >Header("Content-type: image/gif"); >$myrow = pg_fetch_object($result,0); >$image = $myrow->image; >pg_loreadall($image); >pg_close($db); >?> > >and finally my database.. >images=# \d images > Table "images" > Attribute | Type | Modifier >-----------+---------+------------------------------- > picnum | integer | not null default...... > image | oid | > >