Thread: files, php & pgsql

files, php & pgsql

From
Chris
Date:
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       |


Re: files, php & pgsql

From
Dave Perkins
Date:
Chris,

I ran a quick test and got the following error: "PostgresSQL query failed:
ERROR:  parser: parse error at or near "
"

If the following is how the code is actually formated:

>$sql = "insert into images (picnum, image) values
>(nextval('images_picnum_seq'), '$loid')";

it might be the source of the problem.

Putting the quoted string all on one line as in:

$sql = "insert into images (picnum, image) values
(nextval('images_picnum_seq'),'$loid')";

eliminates this error.

Hope this helps . . .

Cheers,
Dave


Re: files, php & pgsql

From
Chris
Date:
Hey,

<snip>
>Putting the quoted string all on one line as in:
>
>$sql = "insert into images (picnum, image) values
>(nextval('images_picnum_seq'),'$loid')";

I think that's how I've got it, it might've just been bad line wrapping.

My main problem is with the retrieval of files from the database :/

Thanks anyway :)
Chris.


Re: files, php & pgsql

From
Dave Perkins
Date:
Ahhh . . . Guess this is likely not to be the problem, as it is clear that
it's the formatting of the message that breaks the line. Oops.

I'll let you know if I discover anything else.

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       |
>
>


Re: files, php & pgsql

From
"Adam Lang"
Date:
Do you get any type of error? Or does it just not do anything?

Adam Lang
Systems Engineer
Rutgers Casualty Insurance Company
----- Original Message -----
From: "Chris" <tomcat@weirdness.com>
To: <pgsql-php@hub.org>
Sent: Wednesday, October 18, 2000 6:45 AM
Subject: files, php & pgsql


> 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       |


Re: files, php & pgsql

From
Dave Perkins
Date:
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       |
>
>


Re: files, php & pgsql

From
Chris
Date:
>Do you get any type of error? Or does it just not do anything?

No errors. I get a broken link / image. (ie nothing).

I'll try Dave's other suggestion when I get home.

Thanks.
Chris.