Re: offering downloads of blobs (mysql) with php

  • From: Alex Hall <mehgcap@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Mon, 2 May 2011 18:35:14 -0400

Thanks everyone. I have no clue why, but it suddenly started working;
no restart or anything, it just suddenly asked me to open or save the
file instead of showing the raw data. I am not sure what happened, but
I'm not going to question it!

On 5/2/11, Homme, James <james.homme@xxxxxxxxxxxx> wrote:
> Hi Alex,
> Maybe the part that lets you get a bunch of file types will help some. If
> you store the blob in the database, that would be more secure, would it not?
>
> Jim
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Alex Hall
> Sent: Monday, May 02, 2011 8:33 AM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: offering downloads of blobs (mysql) with php
>
> If they store in the file system, that will not help since I am
> storing in a database. It is worth a look, though, and is a good
> thought. Even if Drupal doesn't do it, some cms should, and many of
> them are open-source. Thanks.
>
> On 5/2/11, Homme, James <james.homme@xxxxxxxxxxxx> wrote:
>> Hi Alex,
>> I have the source code here for Drupal, which is written in PHP. If I can
>> figure out which code downloads attachments, would it help if I send it?
>> Either that, or you could grab the zip file and check it out. I know they
>> use MySQL and they allow attachments to be downloaded. The files are
>> stored
>> in the file system. I know that the Upload module lets you somehow type in
>> the extensions you want to be able to download and somehow magically lets
>> you do it, so the code is there somewhere.
>>
>> Jim
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Alex Hall
>> Sent: Monday, May 02, 2011 7:34 AM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: Re: offering downloads of blobs (mysql) with php
>>
>> The script is the first thing on the page, except the sql query to
>> actually find the blob content. I don't know, maybe I should create a
>> temporary file from the blob content and then download that...
>>
>> On 5/2/11, Jacob Kruger <jacobk@xxxxxxxxxxxxxx> wrote:
>>> Not too sure about actually sending binary data if it's not in a physical
>>> file as such, but I did just test/try out the following to double check
>>> on
>>> the content type for a zip file.
>>>
>>> This worked well enough on my local WAMP server:
>>> <?php
>>> $PhysicalFileName = "pythonScripts.zip";
>>> header('HTTP/1.1 200 OK', True, 200);
>>> header('Content-Description: File Transfer');
>>> header('Content-Type: application/zip');
>>> header('Content-Disposition: attachment; filename="other.zip"');
>>> header('Content-Transfer-Encoding: binary');
>>> header('Expires: 0');
>>> header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>> header('Pragma: public');
>>> header('Content-Length: ' . filesize($PhysicalFileName));
>>>
>>> // readfile() will simply pass the file from the drive straight to the
>>> client.
>>> readfile($PhysicalFileName);
>>>
>>> // Exit to close the process.
>>> exit;
>>> ?>
>>>
>>> You can also test it here, and one other thing I thought of is you need
>>> to
>>> place this all above any actual HTML markup on the page, or else, yes, it
>>> might jumble itself up a bit since then that textual content will already
>>> have possibly been passed to the browser as such, but, you can try out
>>> the
>>> above test script here:
>>> http://www.blindza.co.za/test/
>>>
>>> Stay well
>>>
>>> Jacob Kruger
>>> Blind Biker
>>> Skype: BlindZA
>>> '...fate had broken his body, but not his spirit...'
>>>
>>> ----- Original Message -----
>>> From: "Alex Hall" <mehgcap@xxxxxxxxx>
>>> To: <programmingblind@xxxxxxxxxxxxx>
>>> Sent: Saturday, April 30, 2011 6:08 PM
>>> Subject: Re: offering downloads of blobs (mysql) with php
>>>
>>>
>>>> Thanks. Your script says to use readfile, but I have a blob, not a
>>>> file, so the few tutorials I have found say to echo the blob's
>>>> content. When I do that, though, I get the same result you would get
>>>> if you opened a zip file (my tests are all on zip files) with notepad;
>>>> mostly nothing readable. I have hard-coded the type to be
>>>> "application/zip" since I can't find a way to make php guess the mime
>>>> type from the file name, but I still get no download, just all that
>>>> gibberish text printed to the page. Readfile() does nothing, as I
>>>> expected since this is not actually a file, just the file's binary
>>>> data. Below is my script. Let me know if it does not come out right.
>>>>
>>>> <?php
>>>> include('php/common.php');
>>>> if(isset($_GET['id'])){
>>>> $id=$_GET['id'];
>>>> $con=dbConnect()
>>>>  or die("The file you requested could not be retrieved because the
>>>> database appears to be down. Please try again later.");
>>>> $sql='select m.filename, m.filesize, m.type, m.content, p.title from
>>>> media m, podcasts p where m.podcast='.$id.' and p.podcast_id='.$id;
>>>> //echo $sql.'<br>';
>>>> $res=mysql_query($sql)
>>>>  or die(heading(1, 'Error').'<p>There was a problem finding the file
>>>> you requested. Please try again later.</p><p>'.mysql_error().'</p>');
>>>> $title=mysql_result($res, 0, 'title');
>>>> $size=mysql_result($res, 0, 'filesize');
>>>> $filename=mysql_result($res, 0, 'filename');
>>>> $type=mysql_result($res, 0, 'type');
>>>> $content=mysql_result($res, 0, 'content');
>>>> //echo $title.' (title), '.$filename.' (file name), '.$size.' bytes,
>>>> type='.$type.'<br><br>';
>>>> header('HTTP/1.1 200 OK', True, 200);
>>>> header('Content-Description: File Transfer');
>>>> header('Content-Type: '.$type);
>>>> header('Content-Disposition: attachment; filename='.$filename);
>>>> header('Content-Transfer-Encoding: binary');
>>>> header('Expires: 0');
>>>> header('Pragma: public');
>>>> header('Content-Length: ' .$size);
>>>> readfile($content);
>>>> exit;
>>>> }
>>>> else{ //error out; no file to download
>>>> ?>
>>>>
>>>> <html>
>>>> <head>
>>>> <title>No File to Download</title>
>>>> </head>
>>>>
>>>> <body>
>>>> <?php
>>>> include_once('php/nav.php');
>>>> echo heading(1, 'No File Selected');
>>>> echo '<p>Please select a file; this page will only work if given a
>>>> valid file number to retrieve.</p>';
>>>> ?>
>>>> </body>
>>>> </html>
>>>> <?php } ?>
>>>>
>>>> On 4/30/11, Jacob Kruger <jacobk@xxxxxxxxxxxxxx> wrote:
>>>>> That would generally be related to redirecting content from another
>>>>> source,
>>>>> so it wants to change the file/content type that the browser is
>>>>> expecting
>>>>> as
>>>>> such.
>>>>>
>>>>> For example, the one thing I have is checking if someone is logged in
>>>>> to
>>>>> a
>>>>> site, before sending them a word document directly from a PHP script -
>>>>> idea
>>>>> is partly so they wouldn't be able to know/see the actual file
>>>>> path/URL,
>>>>> but
>>>>> the PHP script tells the browser it's receiving a word document, and
>>>>> then
>>>>> passes it through to the browser:
>>>>>
>>>>> $PhysicalFileName = "cnsttn/constitution.doc";
>>>>> header('HTTP/1.1 200 OK', True, 200);
>>>>> header('Content-Description: File Transfer');
>>>>> header('Content-Type: application/msword');
>>>>> header('Content-Disposition: attachment; filename="constitution.doc"');
>>>>> header('Content-Transfer-Encoding: binary');
>>>>> header('Expires: 0');
>>>>> header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>>>> header('Pragma: public');
>>>>> header('Content-Length: ' . filesize($PhysicalFileName));
>>>>>
>>>>> // readfile() will simply pass the file from the drive straight to the
>>>>> client.
>>>>> readfile($PhysicalFileName);
>>>>> exit;
>>>>> //that last statement closes the browser/server
>>>>> transaction/communication
>>>>> as
>>>>> such
>>>>>
>>>>>
>>>>> Jacob Kruger
>>>>> Blind Biker
>>>>> Skype: BlindZA
>>>>> '...fate had broken his body, but not his spirit...'
>>>>>
>>>>> ----- Original Message -----
>>>>> From: "Alex Hall" <mehgcap@xxxxxxxxx>
>>>>> To: "programmingblind" <programmingblind@xxxxxxxxxxxxx>
>>>>> Sent: Saturday, April 30, 2011 2:34 AM
>>>>> Subject: offering downloads of blobs (mysql) with php
>>>>>
>>>>>
>>>>>> Hi all,
>>>>>> I have a database project due next Wednesday. It is done, but I am
>>>>>> adding things since I have the time (and I really don't want to do my
>>>>>> calc homework right now). One of my databases is for podcasts, the
>>>>>> other for articles. The articles one is fine; I can serve that content
>>>>>> since it is stored in a longtext field, so I need only echo it to the
>>>>>> page. The podcast table is different, though. I looked up this stuff
>>>>>> already, but was taken to a script that was using a header() function
>>>>>> (php) and giving it mime information about the file, then it echoed
>>>>>> the blob, and that was it. I am wondering:
>>>>>> 1. What is all this mime stuff about?
>>>>>> 2. My only experience with files and webpages is putting a link to a
>>>>>> file, even a binary one, and letting the browser take care of it. Why,
>>>>>> then, did the script I found echo the blob and leave it at that? It
>>>>>> was not generating an html page with a link; the link was to
>>>>>> download.php, and download.php was the one doing all this with the
>>>>>> mime information and the echoing of the blob.
>>>>>> 3. Does anyone know of a good resource to find out more about serving
>>>>>> blobs so users can download them? Most of what I find is about
>>>>>> displaying images stored as blobs, but I want to offer a download link
>>>>>> for a given podcast's media file.
>>>>>> Thanks in advance.
>>>>>>
>>>>>> --
>>>>>> Have a great day,
>>>>>> Alex (msg sent from GMail website)
>>>>>> mehgcap@xxxxxxxxx; http://www.facebook.com/mehgcap
>>>>>> __________
>>>>>> View the list's information and change your settings at
>>>>>> //www.freelists.org/list/programmingblind
>>>>>>
>>>>>
>>>>> __________
>>>>> View the list's information and change your settings at
>>>>> //www.freelists.org/list/programmingblind
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Have a great day,
>>>> Alex (msg sent from GMail website)
>>>> mehgcap@xxxxxxxxx; http://www.facebook.com/mehgcap
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>>
>>>
>>
>>
>> --
>> Have a great day,
>> Alex (msg sent from GMail website)
>> mehgcap@xxxxxxxxx; http://www.facebook.com/mehgcap
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>>
>> This e-mail and any attachments to it are confidential and are intended
>> solely for use of the individual or entity to whom they are addressed.  If
>> you have received this e-mail in error, please notify the sender
>> immediately
>> and then delete it.  If you are not the intended recipient, you must not
>> keep, use, disclose, copy or distribute this e-mail without the author's
>> prior permission.  The views expressed in this e-mail message do not
>> necessarily represent the views of Highmark Inc., its subsidiaries, or
>> affiliates.
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>>
>
>
> --
> Have a great day,
> Alex (msg sent from GMail website)
> mehgcap@xxxxxxxxx; http://www.facebook.com/mehgcap
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
>


-- 
Have a great day,
Alex (msg sent from GMail website)
mehgcap@xxxxxxxxx; http://www.facebook.com/mehgcap
__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

Other related posts: