Viewing images stored in a database

This is a discussion on Viewing images stored in a database within the PHP Language forums, part of the PHP Programming Forums category; Ok, I've written this script which is supposed to take an image uploaded by a user and put it ...


Go Back   Usenet Forums > PHP Programming Forums > PHP Language

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 08-21-2004
Plex
 
Posts: n/a
Default Viewing images stored in a database

Ok, I've written this script which is supposed to take an image
uploaded by a user and put it in to a database, then at a later date
be able to extract the image from the database and display the image
to the user.

The problem is that whenever I try to display the image, all I get is
an error message that the image contains errors. Can anyone tell me
where or why these errors might be coming up? Here is my script (I'm
pretty sure it's all there):


<?
include("header.inc");
if (!isset($_SESSION['username']) or ($_SESSION['username'] ==
"Guest")) {
header ("Location: ../index.php");
}
dbconnect();



if($id) {

$query = "select mimetype, data from files where id = $id";
$result = mysql_query($query);

$data = mysql_result($result,0,"data");
$type = mysql_result($result,0,"mimetype");

Header( "Content-type: $type");

$size = 150; // new image width
$src = imagecreatefromstring($data);
$width = imagesx($src);
$height = imagesy($src);
$aspect_ratio = $height/$width;

if ($width <= $size) {
$new_w = $width;
$new_h = $height;
} else {
$new_w = $size;
$new_h = abs($new_w * $aspect_ratio);
}

$img = imagecreatetruecolor($new_w,$new_h);
imagecopyresized($img,$src,0,0,0,0,$new_w,$new_h,$ width,$height);

// determine image type and send it to the client
if ($type == "image/pjpeg") {
imagejpeg($img);
} else if ($type == "image/jpeg") {
imagejpeg($img);
} else if ($type == "image/x-png") {
imagepng($img);
} else if ($type == "image/gif") {
imagegif($img);
}
imagedestroy($img);

}

if (isset($_POST['submit'])) {
if (isset($blob_name)) {

if(!$blob_id = upload($blob, $blob_type, $blob_name,
NULL, $_SESSION['username'])) {
echo "Error uploading file";
} else {
echo "File uploaded";
}
}
}

echo"
<form method=POST action=$PHP_SELF
enctype=multipart/form-data>
<p>File to upload:<br>
<input type=file name=blob>
<input type='submit' name='submit' value='Upload'>
</form>
";
echo "<p></p>";
if ($data = getInfo()) {

echo '<table border="0" align="center">
<tr bgcolor="#bad1d1">
<td>File Name</td>
<td><center>File Size</center></td>
<td><center>Mime Type</center></td>
<td><center>Checksum</center></td>
<td><center>Extension</center></td>
<td><center>Uploader</center></td>
<td><center>Date</center></td>
<td><center>Option</center></td>
</tr>
';
for ($i=0; $i<count($data); $i++) {
echo '
<tr bgcolor=#CCCCCC>
<td><a
href="index.php?id='.$data[$i]["id"].'">'.$data[$i]["file_name"].'</a></td>
<td>'.$data[$i]["file_size"].'</td>
<td>'.$data[$i]["mimetype"].'</td>
<td>'.$data[$i]["checksum"].'</td>
<td>'.$data[$i]["extension"].'</td>
<td>'.$data[$i]["uploader"].'</td>
<td>'.$data[$i]["date"].'</td>';
if ($_SESSION["username"] == $data[$i]["uploader"] ||
$_SESSION["level"] == "admin") {
echo '<td><a
href="index.php?id='.$data[$i]["id"].'">Delete</a></td>';}
echo '</tr>
';
}
echo '</table>';
echo '<br>';
echo 'Number of files: ';
echo blobcount();
echo '<br>';
}


?>


<?
function upload($blob, $blob_type, $blob_name, $blob_id = 0,
$uploader) {
if ($blob_id < 1) {
return add($blob, $blob_type, $blob_name, $uploader);
} else {
return update($blob_id, $blob, $blob_type, $blob_name,
$uploader);
}
}

function add($blob, $blob_type, $blob_name, $uploader) {
if ($blob_id = dbinsert("INSERT INTO files (id, file_name,
data, file_size, mimetype, extension, checksum, uploader, date) VALUES
('', '".$blob_name."', '".prepareFile($blob)."',
'".filesize($blob)."', '".$blob_type."',
'".getExtension($blob_name)."', '".generate_sfv_checksum($blob)."',
'".$uploader."', NOW())")) {
return $blob_id;
} else {
echo 'Error adding file';
return false;
}
}

function generate_sfv_checksum($blob) {
$sfv_checksum =
strtoupper(dechex(crc32(file_get_contents($blob))) );
return $sfv_checksum;
}

function getExtension($filename) {
return ereg( ".([^\.]+)$", $filename, $r ) ? $r[1] : "";
}

function prepareFile($blob) {
$blob = addslashes(fread(fopen($blob, "rb"),
filesize($blob)));
$blob = base64_encode($blob);
return $blob;
}

function getInfo($ID = false) {
if ($ID) {
return dbselect("SELECT id, mimetype, extension,
file_size, checksum, file_name, uploader, date FROM files WHERE id =
'".$ID."'");
} else {
return dbselect("SELECT id, mimetype, extension,
file_size, checksum, file_name, uploader, date FROM files");
}
}
?>

--Plex
Reply With Quote
  #2 (permalink)  
Old 08-21-2004
Andy Hassall
 
Posts: n/a
Default Re: Viewing images stored in a database

On Sat, 21 Aug 2004 02:37:59 -0700, Plex <invalid@thisisfake.com> wrote:

>Ok, I've written this script which is supposed to take an image
>uploaded by a user and put it in to a database, then at a later date
>be able to extract the image from the database and display the image
>to the user.
>
>The problem is that whenever I try to display the image, all I get is
>an error message that the image contains errors. Can anyone tell me
>where or why these errors might be coming up? Here is my script (I'm
>pretty sure it's all there):
>
>
>if($id) {
>
> $query = "select mimetype, data from files where id = $id";
> $result = mysql_query($query);
>
> $data = mysql_result($result,0,"data");
> $type = mysql_result($result,0,"mimetype");
>
> Header( "Content-type: $type");
>
> $size = 150; // new image width
> $src = imagecreatefromstring($data);
>

[snip]

>function prepareFile($blob) {
> $blob = addslashes(fread(fopen($blob, "rb"),
>filesize($blob)));
> $blob = base64_encode($blob);


As far as I can see, if you remove this line then the rest looks OK. For some
reason you're trying to use base64 encoded data as if it were the original raw
data; if you're uploading into a BLOB field you don't need this step.

> return $blob;
>}


--
Andy Hassall / <andy@andyh.co.uk> / <http://www.andyh.co.uk>
<http://www.andyhsoftware.co.uk/space> Space: disk usage analysis tool
Reply With Quote
  #3 (permalink)  
Old 08-22-2004
Plex
 
Posts: n/a
Default Re: Viewing images stored in a database

On Sat, 21 Aug 2004 11:43:50 +0100, Andy Hassall <andy@andyh.co.uk>
wrote:

>On Sat, 21 Aug 2004 02:37:59 -0700, Plex <invalid@thisisfake.com> wrote:
>
>>Ok, I've written this script which is supposed to take an image
>>uploaded by a user and put it in to a database, then at a later date
>>be able to extract the image from the database and display the image
>>to the user.
>>
>>The problem is that whenever I try to display the image, all I get is
>>an error message that the image contains errors. Can anyone tell me
>>where or why these errors might be coming up? Here is my script (I'm
>>pretty sure it's all there):
>>
>>
>>if($id) {
>>
>> $query = "select mimetype, data from files where id = $id";
>> $result = mysql_query($query);
>>
>> $data = mysql_result($result,0,"data");
>> $type = mysql_result($result,0,"mimetype");
>>
>> Header( "Content-type: $type");
>>
>> $size = 150; // new image width
>> $src = imagecreatefromstring($data);
>>

>[snip]
>
>>function prepareFile($blob) {
>> $blob = addslashes(fread(fopen($blob, "rb"),
>>filesize($blob)));
>> $blob = base64_encode($blob);

>
> As far as I can see, if you remove this line then the rest looks OK. For some
>reason you're trying to use base64 encoded data as if it were the original raw
>data; if you're uploading into a BLOB field you don't need this step.
>
>> return $blob;
>>}


I took out that line (I think it's a remnant from when I was trying
something else to get it to work), and uploaded another picture. This
time I also put in a couple lines to output the data receive from the
database into a file, so I could check if the data was somehow getting
corrupted.

Taking out that encode line, the file output worked (images uploaded
with it didn't). However, even thought the file output worked, I am
still getting the error message about the file containing errors, so I
think the problem may be somewhere in processing and outputting the
data, but I don't know enough about the image functions to know where
the problem might be (or if they're even the problem).

--Plex
Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 09:07 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0