Re: Serving graphics from a database

From: Andy Hassall (andy_at_andyh.co.uk)
Date: 08/15/04


Date: Sun, 15 Aug 2004 00:36:38 +0100

On Sat, 14 Aug 2004 13:28:17 GMT, Margaret MacDonald
<scratch65536@att.not.invalid> wrote:

>I want to store frequently-used graphic elements in a db and serve
>them from there rather than from the filesystem.
>
>Is there a better/faster way to do that than this? (error checking
>etc not shown)
>
>The relevant piece of the page:
><?php
> echo
> '<table><tr><td>
> <img src="ImageFromDB.php?Image=ImageIdentifer">
> </td></tr></table>' ;
>?>
>
>ImageFromDB.php:
><?php
> $imgname = $_GET['Image'] ;
> $dset = mysql_query( 'SELECT imagebits FROM graphics_table
> WHERE name="' . $imgname . '"' ) ;
> $rec = mysql_fetch_row($dset) ;
> $browser = fopen( 'php://output', 'w') ;
> header( 'Content-Type: image/png' ) ;
> fwrite( $browser, $rec[0] ) ;
>?>
>
>I fingered through the docs and did some googling, but didn't find
>anything obviously helpful. Many thanks for any insights.

 Looks OK to me. A plain 'print' would likely do just as well as opening the
output stream as you've done, but there's nothing wrong with that. You might
want to change the mode to 'wb' though to indicate binary mode.

 If these images are frequently accessed then it might be worth considering
using a filesystem-based cache if the database queries take noticable amounts
of resources.

 General opinion on this group is to not store images in a database and instead
just store a filesystem path. However, I believe that if the images are

(a) user data rather than static source code of the site
(b) have relationships with data in the database
(c) have any sort of value with regards to the end-user

 ... then it's worth considering storing them in full in the database so you
can include them consistently in the database backups, and have the same
transaction guarantees as all the other data on them.

-- 
Andy Hassall / <andy@andyh.co.uk> / <http://www.andyh.co.uk>
<http://www.andyhsoftware.co.uk/space> Space: disk usage analysis tool


Relevant Pages

  • Please help find the error
    ... this is read directly from the database) and are displayed on a canvas, ... The images are read from filesystem or database (via ...
    (comp.lang.tcl)
  • Re: [PHP] Re: how to display images stored in DB
    ... Images are typically best supported in the form of files. ... the image from the database is less efficient than letting the web ... Databases implement their own filesystem for the most parts. ... some databases support raw access in which case they're performance is ...
    (php.general)
  • Re: Serving graphics from a database
    ... Andy Hassall wrote: ... >>them from there rather than from the filesystem. ... > General opinion on this group is to not store images in a database and instead ... Your articulation of when/why it can be good to store images in the db ...
    (comp.lang.php)
  • Re: Max files in unix folder from PIL process
    ... the reason I want to use the filesystem is to avoid the speed problems ... that come from storing images in the database. ... > I've had apps that had over 800k subdirectories and files. ...
    (freebsd-questions)
  • Re: [PHP] Re: how to display images stored in DB
    ... Images are typically best supported in the form of files. ... database is not a good idea. ... Databases implement their own filesystem for the most parts. ... A data storage system within a file system. ...
    (php.general)