Ouch! I don't know if many people would recommend this method - that's a
fair bit of unnecesary overhead to place ony our server...depending, of
course, on how often these images are created/modified/read.

P


> 
> Here's how I do b) in PHP:
> 
> 1) Get the MIME type of the image.
> 2) Read the binary file contents and store it in a PHP variable.
> 3) Base64 encode the binary data, so that there is no binary anymore, but just
> plain ASCII data.
> 4) Store the image in a MEDIUMTEXT or LONGTEXT column
> 5) Store the MIME type
> 
> When I want to retrieve and display the image, I do:
> 
> 1) Retrieve the MIME type
> 2) Retrieve the Base64 encoded binary
> 3) Decode the base64 ascii to get the binary
> 4) Print the MIME type in the header (if we're talking about HTML, that is)
> 5) Print the image
> 
> Code:
> 
> /*
> BinTable contains at least three columns:
>  ID  -> autoincrementing int
>  MIME     -> VARCHAR( 50 )
>  Bin -> MEDIUMTEXT
> */
> 
> function StoreImage( $MIME, $Binary ){
>   // Store the binary with the associated MIME type in a database
>   // Returns the row id of the just inserted row
> 
>   $base64 = base64_encode( $Binary );
>   $q  = "INSERT INTO BinTable ( MIME, Bin ) VALUES (";
>   $q .= "'" . $MIME . "'";
>   $q .= ", '" . $base64 . "'";
>   $q .= ")";
> 
>   mysql_query( $q );
>   return( mysql_insert_id() );
> }
> 
> function PrintImage( $ID ){
>   // Retrieve the image with the assoc. ID from the BinTable table
>   // Returns TRUE if everything was Okay; FALSE otherwise
>   // Sideeffect: Prints the image with header to stdout
> 
>   $q  = "SELECT MIME, Bin FROM BinTable WHERE ID = " . $ID;
>   $rs = mysql_query( $q );
>   if ( mysql_num_rows( $rs ) ){
>     // There is something to return
>     if( ! headers_sent() ){
>       // Headers have not yet been sent - we can go ahead
>       $row = mysql_fetch_object( $rs );
>       $bin = base64_decode( $row->Bin );
>       header( "Content-Type: " . $row->MIME );
>       print $bin;
>       $ret = TRUE;
>     } else {
>       // Headers have already been printed - cannot continue
>       $ret = FALSE;
>     }
>   } else {
>     $ret = FALSE;
>   }
>   return( $ret );
> }
> 
> // The following assumes, that there is a <INPUT TYPE=FILE NAME=image> in the
> HTML form
> // Futher, there also needs to be a form element where the MIME Type is
> specified
> // I assume <SELECT NAME=MIME><OPTION VALUE="image/png">png</SELECT>
> if( is_uploaded_file( $image['tmp_name'] ) ){
>   // The file has been uploaded - safe to store in database
> 
>   // Get the size in bytes of uploaded file
>   clearstatcache();
>   $fs = filesize( $image['tmp_name'] );
> 
>   // Read file contents into a variable
>   $fd = fopen( $image['tmp_name'], "r" );
>   $file_bin = fread( $fd, $fs );
> 
>   // Close the file
>   fclose( $fd );
> 
>   // Store the image in the database
>   $img_ig = StoreImage( $MIME, $file_bin );
> 
>   // And also print it
>   if( ! PrintImage( $img_id ) ){
>     echo "For some reason the image could not be printed!";
>   }
> }
> 
> 
> 
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
> 
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail <[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> 
> 


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to