Re: Serving files form DB
| From: | Richard Lynch | Date: | Thu, 11 Jan 2001 07:51:42 +0000 |
| Subject: | Re: Serving files form DB | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-33934@lists.php.net to get a copy of this message | ||
You could save yourself a whole lot of headaches by putting the files in the
file-system, and storing only the path in the database...
Also, IE and Netscape use different things to populate the filename box on
the download dialog...
One uses Content-disposition header(), and one uses whatever happens to be
at the end of the path part of the URL.
Thus, a goofy path like:
http://wild.net/display.php/goofy.gif?id=42
(Where 42 is a GIF image of Goofy)
actually works.
The web-server and PHP ignore that goofy.gif crap, and the browser is fooled
into thinking you're downloading a static file.
----- Original Message -----
From: "Boget, Chris" <Chris.Boget@wild.net>
Newsgroups: php.general
Sent: Tuesday, January 09, 2001 4:44 PM
Subject: [PHP] Serving files form DB
> I'm storing files in a mySQL table that looks like this:
>
> | file_name | varchar(100) | | MUL | | |
> | file_description | text | YES | | NULL | |
> | file_type | varchar(50) | | | | |
> | file_size | int(10) unsigned | | | 0 | |
> | added_by | varchar(10) | | | | |
> | access_types | text | YES | | NULL | |
> | access_users | text | YES | | NULL | |
> | file_num | bigint(10) unsigned | | PRI | 0 |
> auto_increment |
> | bin_data | blob | | | NULL | |
>
> the "file_type" field stores the actual data type for the file
> (such as 'application/msword', etc). To serve the file, I'm
> using the following code:
>
> <script language="php">
>
> $dbInfo = unserialize( base64_decode( $db_key ));
> if( is_array( $dbInfo )) {
>
> $fileQuery = "SELECT * FROM $dbInfo[table_name] WHERE
> file_num=$dbInfo[record_num]";
> $fileResult = mysql( $dbInfo[db_name], $fileQuery );
>
> if(( $fileResult ) && ( mysql_errno() == 0 )) {
> $fileInfo = mysql_fetch_array( $fileResult );
>
> header( "Content-Disposition: attachment;
> filename=$fileInfo[file_name]" );
> header( "Content-Description: PHP Generated Data" );
> header( "Content-type: $fileInfo[file_type];" );
> header( "Content-length: $fileInfo[file_size]" );
>
> echo $fileInfo[bin_data];
>
> flush();
>
> }
> }
>
> </script>
>
> Everything is working great. If I echo the query that is getting
> run, it's correct. If I echo out the data that is getting passed via
> the header() function, it looks all good. However, when my
> browser actually tries to download/open the file, everything gets
> all screwed up. The file name that it says that it's downloading
> is *nothing* like the actual file name and is in fact just a bunch
> of garbage. If I try to open anything other than a text file, I
> get errors from the application that is getting run (MSWord, say)
> and if I try to save if, the file is corrupt. There are no spaces or
> NULL characters being printed out by the script.
> What's going on? What am I doing wrong?
>
> Chris
>